为什么不修改@ Html.LabelFor值?

时间:2015-12-31 04:04:45

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

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

在cshtml页面

@Html.LabelFor(m => m.Increment, Model.Increment)
控制器页面中的

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

起始结果为0,按此键增加为1,无论我按下多少时间,值永远为1。

2 个答案:

答案 0 :(得分:1)

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

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

这个不胜的事件显示了你的增量属性的价值。如果你想要,你可以简单地渲染它像

<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"/>
}

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

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

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

答案 1 :(得分:0)

标签仅供展示。它的值不会提交回服务器。请改用文本框并将其放在表单中。

@Html.TextBoxFor(m => m.Increment);