c# - 为什么不保留对 @Html.LabelFor 值的修改?

标签 c# asp.net-mvc html.labelfor

我是 MVC 4 的新手, 我想做的是,制作一个显示增量整数的标签

在cshtml页面

@Html.LabelFor(m => m.Increment, Model.Increment)

在 Controller 页面

public ActionResult Index(IncrementModel IM){
    IM.Increment ++;
    return View(IM);
}

开始的结果是0,按一个这个增加到1,那么无论按多少次,值永远是1。

最佳答案

LabelFor 辅助方法呈现这样的标签。

<label for="Increment">Increment</label>

这不会显示您的 mdoel 增量属性的值。如果你想要那样,你可以简单地渲染它

<p>@Model.Increment</p>

或者使用 DisplayFor() 辅助方法。

@Html.DisplayFor(s=>s.Increment)

这也只会将值呈现给您的页面。当您发布表单时,它不会将页面中的当前值发布到 HttpPost 操作。为此,您需要一个表单域。它可以是文本框、隐藏字段等。

@using(Html.BeginForm())
{
   @Html.DisplayFor(s=>s.Increment)
   @Html.HiddenFor(s => s.Increment)
   <input type="submit"/>
}

但现在当您发布值并在操作方法中递增它并将其发回时,输入字段(隐藏字段)的值不会每次都用新值更新。因为 ModelStateDictionary 现在有这个属性的一些值,这是第一次更新后的值。这个值将在我们为 Increment 属性渲染隐藏字段时使用。这就是您将 1 视为值并且它永远不会改变的原因。

您应该做的是从 ModelStateDictionary 中明确删除此项。

[HttpPost]
public ActionResult Index(IncrementModel IM)
{
    IM.Increment++;
    ModelState.Remove("Increment");
    return View(IM);
}

关于c# - 为什么不保留对 @Html.LabelFor 值的修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540826/

相关文章:

asp.net-mvc - 为什么要在 MVC 中使用 LabelFor?

c# - 单击多个文本框的事件

c# - 为什么我得到 "Culture is not supported"以及如果有的话,我应该怎么做?

c# - 从 Outlook 中获取未读邮件

c# - 在 C# 中使用 Neo4jClient 在 Neo4j 中创建节点之间的关系

c# - MVC - 清除 SelectList 的默认选定值

c# - 单选按钮选定的值未传递到 Controller

jquery - 使用 $.Post 或 $.Ajax 传递 HttpPostedFileBase 类型