我是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("/");
}
如何实现这一结果?
提前致谢!
答案 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("/");
}