gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 3 从同一个表单中保存和编辑

转载 作者:行者123 更新时间:2023-12-01 01:27:46 25 4
gpt4 key购买 nike

我们有一个表单,根据情况,我们希望在同一表单的添加操作和更新操作之间切换。以下是我们表格的精简版。

enter image description here

实际上,“订单号”文本框被禁用,并且永远无法在此表单中进行编辑。现在,场景有点像这样:

  • 用户第一次登陆此表单时,“订单号”文本框为空白。
  • 用户输入客户名称并提交表单。
  • 此时在 Controller Action 中,我们获取数据库中订单号的最大值并将订单号增加 1 。然后我们添加 数据库中的新记录。
  • 如果该操作成功,我们更新当前表单,“订单号”文本框现在应该使用上一步中创建的订单号更新,并且应该发生的是我们现在处于编辑模式。
  • 假设用户然后更新“客户名称”并提交表单,数据库中的记录应该是 更新 在这种情况下。

  • 现在为一些代码:

    风景:
       <%: Html.TextBox("OrderNumber", Model.OrderNumber == 0 ? "" : Model.OrderNumber.ToString(), new { @disabled = "true" })%>

    Controller :
     public ActionResult Index()
    {
    var customerOrderModel = new CustomerOrderModel();
    return View(customerOrderModel);
    }

    public ActionResult Add(CustomerOrderModel customerOrderModel, FormCollection values)
    {
    // We write the logic for either the add or update.
    return this.View("Index", customerOrderModel);
    }

    我已经从添加操作中删除了代码,因为通过放置断点我们知道“//我们为添加或更新编写逻辑”。不是问题。

    现在我们遇到麻烦的是这个。我们可以在表中添加新条目,随后“订单号”字段会更新并正确显示。但是,在我们更改客户名称并尝试更新后,传递给“添加”操作的 customerOrderModel 显示正在传递的订单号为 0(这是我们在系统中的默认值,用于确定我们是否正在执行添加或更新操作)。

    所以问题是为什么我们的文本框会更新,这似乎表明我们的模型正在更新,但是当我们尝试提交时,正确的模型没有被传递进来?此外,为什么在“添加”操作完成后索引操作没有被命中?我们必须做些什么才能让事情按照我们希望的方式工作?

    最佳答案

    型号

    namespace Demo.Models
    {
    public class Order
    {
    public int OrderId { get; set; }
    public string CustomerName { get; set; }
    }

    public class OrderDb:DbContext
    {
    public DbSet<Order> Orders { get; set; }
    }
    }

    查看
    @model Demo.Models.Order

    <form action="/" method="post">
    <table>
    <tr>
    <td>@Html.LabelFor(m=>m.OrderId)</td>
    <td>
    @Html.EditorFor(m => m.OrderId)
    </td>
    </tr>
    <tr>
    <td>
    @Html.LabelFor(m=>m.CustomerName)
    </td>
    <td>
    @Html.EditorFor(m=>m.CustomerName)
    </td>
    </tr>
    <tr>
    <td></td>
    <td>
    <input type="submit" name="submit" value="submit" />
    </td>
    </tr>
    </table>
    </form>

    行动
    public ActionResult Index(Order o)
    {
    if (o.CustomerName != null)
    {
    using (OrderDb db = new OrderDb())
    {
    db.Entry(o).State = o.OrderId == 0 ? EntityState.Added : EntityState.Modified;
    db.SaveChanges();
    ModelState.Clear();
    }
    }

    return View(o);
    }

    关于asp.net-mvc - ASP.NET MVC 3 从同一个表单中保存和编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613044/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com