您好,
我在ASP.NET MVC中有一个强类型视图。为了在没有连接到字段(ex TextBoxFor)时跟踪模型的属性,我将不得不使用HTML.HiddenFor元素。这样可以轻松地操作数据并将其恢复到服务器。
现在说我的强类型视图包含一个局部视图,我在主视图中提供了一些模型,如下所示:
<% Html.RenderPartial("~/Views/Ad/Partial/ListSettings.ascx", Model.ALS); %>
用于阅读和操作ALS proerpty(复杂对象)的所有javascript都放置在部分视图中,以便在其他主视图上使用局部视图。
在这个局部视图中,我还有以下几行:
<%: Html.HiddenFor(c => c.CP) %>
<%: Html.HiddenFor(c => c.L) %>
<%: Html.HiddenFor(c => c.OB) %>
<%: Html.HiddenFor(c => c.ST)%>
<%: Html.HiddenFor(c => c.P)%>
这可以通过javascript阅读,但在提交视图时,这些属性的设置不会跟回服务吗?
我确实尝试将它们放在主视图中,而不是像这样:
<%: Html.HiddenFor(c => c.ALS.CP) %>
<%: Html.HiddenFor(c => c.ALS.L) %>
<%: Html.HiddenFor(c => c.ALS.OB) %>
<%: Html.HiddenFor(c => c.ALS.ST)%>
<%: Html.HiddenFor(c => c.ALS.P)%>
并将javascript指向正确的字段,但即使这样可行,问题在于局部视图不会占用所需的一切,我将不得不在部分视图放置的每个主视图中实现这些隐藏的字段?
如何处理?
BestRegards
答案 0 :(得分:2)
如果用户无法修改所有这些字段,您只需包含一个隐藏字段,其中包含一些ID,允许您从数据源中取回它们。例如:
<%= Html.HiddenFor(x => x.Id) %>
现在这个id将被发布回控制器,如果它被包装在一个表单中,或者可以被javascript使用并发送到AJAX请求。在控制器操作中,您将使用id并从最初存储的任何位置获取所有内容:
[HttpPost]
public ActionResult Foo(int id)
{
var model = _repository.Get(id);
...
}
如果属性是可修改的,那么您将使用标准输入元素(如文本框和下拉列表),允许用户设置其值,然后POST控制器操作将更新的视图模型作为参数。