我正在使用带有Razor和C#的MVC。我想更新一个元素......一个带有ajax的计数器。这是我的代码:
@model Domain.CounterObject
@using (Ajax.BeginForm("Count", "CounterObject", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "my-control" }))
{
<div id="my-control" class="bid-object">
<div>
<span class="title">@Html.Encode(Model.Title)</span>
</div>
<div>
<span class="display">@Html.Encode(Model.GetFinalDate())</span>
</div>
<div>
<span class="display">@Html.Encode(Model.GetValue())</span>
</div>
<div>
<input type="submit" value="Count" />
</div>
</div>
}
在我的控制器中,我有这段代码:
[HttpPost]
public PartialViewResult Count(CounterObject counter)
{
// Special work here
return PartialView(counter);
}
问题是我在Count方法中收到的CounterObject计数器始终为null。如何将页面中的值传递给控制器?
答案 0 :(得分:0)
您必须使用名称和ID定义输入字段,然后ModelBinder才能绑定到CounterObject。
您可以使用@ Html.EditorForModel一次,然后检查生成的Html以查看它生成的名称/ ID对。有了这些,你可以继续并手工制作你的Html。
答案 1 :(得分:0)
使用
<span class="title">@Html.Encode(Model.Title)</span>
<div class="editor-field">@Html.EditorFor(Model => Model.Title)<div>
//For other fields
通过这种方式,您可以绑定到您的对象。
答案 2 :(得分:0)
我在Count方法中收到的始终为null
首先,您没有从表单中提交任何内容,那么绑定是如何发生的?
如果不允许用户编辑值,但仍希望通过表单提交,则必须使用hidden fields
。
对于前。
<div>
<span class="title">@Html.Encode(Model.Title)</span>
@Html.HiddenFor(m => m.Title)
</div>
请注意,隐藏字段应与属性具有相同的名称,以使绑定成功发生。
最好在模型中包含存储GetFinalDate()
和GetValue()
结果的属性,以便轻松绑定Title
中的内容。