ASP.Net MVC:将隐藏字段发布/绑定/保存到模型

时间:2016-01-14 23:40:45

标签: asp.net-mvc razor

我是ASP.Net MVC的新手。 我的模型有以下字段: 活动名称,开始时间,结束时间,所有者。

现在在视图中我与此类似(通过表单呈现和发布更新的数据):

<tbody>
    @if (Model.Events != null)
    {
       for (int i = 0; i < Model.Events.Count; i++)
       {
        <tr class="event-record">
        <td>@Html.TextBoxFor(m => m.Events[i].EventName, new { @class = "form-control" })</td>
        <td>@Html.TextBoxFor(m => m.Events[i].StartTime, new { @class = "form-control" })</td>
        <td>@Html.TextBoxFor(m => m.Events[i].EndTime, new { @class = "form-control" })</td>
        </tr>
        }
    }
</tbody>

现在我的视图没有为所有者提供任何输入文本字段,我打算通过javascript填写该所有者字段,并将该信息与其他可见字段一起发布。

[更新]这是我的HTTP Post操作:

[HttpPost]
[MultipleButton(Name = "action", Argument = "EventSaveExit")]
public ActionResult EventSaveExit(MasterEvent masterEvents)
{
    CreateUpdateEvent(masterEvents);
    return Redirect("/");
}

如何实现这一结果?

提前致谢!

2 个答案:

答案 0 :(得分:1)

尝试

@Html.HiddenFor(m => m.Events[i].Owner)

这应该会给你一个隐藏的文本框,绑定到Owner属性。

它基本上呈现为<input type="hidden" ...元素

答案 1 :(得分:1)

您应该为Owner属性添加隐藏字段。您可以使用HiddenFor辅助方法创建隐藏字段。

<tr class="event-record">
    <td>
        @Html.TextBoxFor(m => m.Events[i].EventName, new {@class = "form-control"})
        @Html.HiddenFor(m => m.Events[i].Owner, new {@class = "form-control ownerItem"})
    </td>
</tr>

您可以使用javascript设置隐藏字段的值。下面的代码使用jQuery,并将所有所有者隐藏字段的值设置为&#34; Scott&#34;在文件准备活动上。

$(function(){
    //set to all input element's with ownerItem css class
    $("input.ownerItem").val("Scott");
});

绝不信任客户端数据

如果您尝试将当前用户名保存为每条记录的所有者属性值,则不应在客户端执行此操作,因为任何人都可以打开您的站点并使用浏览器开发工具,将隐藏字段的值更新为任何命名并保存记录。你应该在服务器端这样做。

[HttpPost]
public ActionResult EventSaveExit(MasterEvent masterEvents)
{
   foreach (var eventVm in masterEvents.Events)
   {
      eventVm.Owner = "Set the value here";
   }
   // now continue saving
   CreateUpdateEvent(masterEvents);
   return Redirect("/");
}