如何在部分视图中保持类型化视图模型对象的状态?

时间:2011-07-03 12:28:31

标签: .net asp.net-mvc view partial-views hidden-field

您好,

我在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

1 个答案:

答案 0 :(得分:2)

如果用户无法修改所有这些字段,您只需包含一个隐藏字段,其中包含一些ID,允许您从数据源中取回它们。例如:

<%= Html.HiddenFor(x => x.Id) %>

现在这个id将被发布回控制器,如果它被包装在一个表单中,或者可以被javascript使用并发送到AJAX请求。在控制器操作中,您将使用id并从最初存储的任何位置获取所有内容:

[HttpPost]
public ActionResult Foo(int id)
{
    var model = _repository.Get(id);
    ...
}

如果属性是可修改的,那么您将使用标准输入元素(如文本框和下拉列表),允许用户设置其值,然后POST控制器操作将更新的视图模型作为参数。