加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 10:00:43 所属栏目:asp.Net 来源:网络整理
导读:我们有一个表单,根据我们想要在同一表单中的添加操作和更新操作之间切换的情况.以下是我们表格的简化版本. 实际上,“订单号”文本框已禁用,并且永远不能以此形式进行编辑.现在,场景有点像这样: 用户第一次登录此表单时,“订单号”文本框为空白. 用户输入客
我们有一个表单,根据我们想要在同一表单中的添加操作和更新操作之间切换的情况.以下是我们表格的简化版本.

实际上,“订单号”文本框已禁用,并且永远不能以此形式进行编辑.现在,场景有点像这样:

>用户第一次登录此表单时,“订单号”文本框为空白.
>用户输入客户名称并提交表单.
>此时,在控制器操作中,我们获取数据库中订单号的最大值,并将订单号递增1.然后我们在数据库中添加新记录.
>如果该操作成功,我们将更新当前表单,现在应使用上一步中创建的订单号更新“订单号”文本框,并且还应该发生的是我们现在处于编辑模式.
>假设用户随后更新“客户名称”并提交表单,则应在此实例中更新数据库中的记录.

现在有些代码:

风景:

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

控制器:

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);
    }

我已从Add操作中删除了代码,因为从断点开始我们知道“//我们为添加或更新编写逻辑”.不是问题.

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

所以问题是为什么我们的文本框会更新,这似乎表明我们的模型正在更新,但是当我们尝试提交时,正确的模型不会被传递?此外,为什么在“添加”操作完成后,索引操作不会受到影响?我们需要做些什么才能按照我们希望的方式开展工作?

解决方法

这是因为HtmlHelpers首先向ModelState查找值,然后使用您明确使用的值.

因此,当您添加实体时,您会在模型状态中获得[“Id”] = 0.

因此解决了在成功添加后必须使用.Clear()清除ModelState.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读