3

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

在cshtml页面中

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

在控制器页面中

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

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

4

2 回答 2

1

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

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

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

<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);
}
于 2015-12-31T04:42:03.487 回答
0

标签仅用于显示。它的值没有提交回服务器。请改用文本框并将其放置在表单中。

@Html.TextBoxFor(m => m.Increment);
于 2015-12-31T04:14:54.013 回答