0

我将 MVC 与 Razor 和 C# 一起使用。我想更新一个元素......一个带有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 计数器始终为空。如何将值从我的页面传递给控制器​​?

4

3 回答 3

0

您必须定义一个带有名称和 ID 的输入字段,然后 ModelBinder 可以将其绑定到您的 CounterObject。

您可以使用一次@Html.EditorForModel,然后检查生成的 Html 以查看它生成的名称/ID 对类型。如果您愿意,您可以继续使用它们手工制作您的 Html。

于 2012-06-25T16:02:13.003 回答
0

采用

<span class="title">@Html.Encode(Model.Title)</span>
<div class="editor-field">@Html.EditorFor(Model => Model.Title)<div>
//For other fields

通过这种方式,您可以绑定到您的对象。

于 2012-06-25T16:53:39.660 回答
0

我在我的 Count 方法中收到的总是 null

首先,您没有从表单提交任何内容,那么绑定是如何发生的?如果不允许用户编辑值但您仍想通过表单提交它们,那么您必须hidden fields与它们一起使用。

例如。

<div>
   <span class="title">@Html.Encode(Model.Title)</span>
   @Html.HiddenFor(m => m.Title)
</div>

请注意,隐藏字段应与属性具有相同的名称,以使绑定成功。

最好在模型中拥有存储GetFinalDate()GetValue()结果的属性,这样您就可以轻松地绑定诸如 in 之类的东西Title

于 2012-06-25T17:26:33.960 回答