如何将页面中的值传递给控制器​​?

时间:2012-06-25 15:55:28

标签: c# asp.net-mvc razor asp.net-ajax

我正在使用带有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。如何将页面中的值传递给控制器​​?

3 个答案:

答案 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中的内容。