【问题标题】:How can I pass a value from my page to the controller?如何将值从我的页面传递给控制器​​?
【发布时间】:2012-06-25 15:55:28
【问题描述】:

我将 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 计数器始终为空。如何将值从我的页面传递到控制器?

【问题讨论】:

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


    【解决方案1】:

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

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

    例如

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

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

    最好在模型中拥有存储GetFinalDate()GetValue() 结果的属性,这样您就可以轻松绑定Title 中的内容。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        使用

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-13
          • 1970-01-01
          • 2015-05-12
          • 2015-03-16
          • 1970-01-01
          • 1970-01-01
          • 2016-01-28
          • 1970-01-01
          相关资源
          最近更新 更多