.net 如何在局部视图中保持类型化viewmodel对象的状态?

.net 如何在局部视图中保持类型化viewmodel对象的状态?,.net,asp.net-mvc,view,partial-views,hidden-field,.net,Asp.net Mvc,View,Partial Views,Hidden Field,你好, 我在ASP.NET MVC中有一个强类型视图。若要在未连接到字段(例如TextBoxFor)时跟踪模型的属性,我必须使用HTML.HiddenFor元素。这使得操作数据并将其返回服务器变得很容易 假设我的强类型视图包含一个局部视图,其中我从主视图中提供了一些模型,如下所示: <% Html.RenderPartial("~/Views/Ad/Partial/ListSettings.ascx", Model.ALS); %> <%: Html.HiddenFor(c

你好,

我在ASP.NET MVC中有一个强类型视图。若要在未连接到字段(例如TextBoxFor)时跟踪模型的属性,我必须使用HTML.HiddenFor元素。这使得操作数据并将其返回服务器变得很容易

假设我的强类型视图包含一个局部视图,其中我从主视图中提供了一些模型,如下所示:

<% Html.RenderPartial("~/Views/Ad/Partial/ListSettings.ascx", Model.ALS); %>
<%: 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)%>

所有用于读取和操作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)%>
c.CP)%%>
c、 L)%>
c、 OB)%>
c、 ST)%>
c、 P)%>
javascript可以很好地读取这些属性,但在提交视图时,这些属性的设置不会返回到服务

我尝试将它们放置在主视图中,而不是像这样:

<% Html.RenderPartial("~/Views/Ad/Partial/ListSettings.ascx", Model.ALS); %>
<%: 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)%>
c.ALS.CP)%>
c、 ALS.L)%>
c、 ALS.OB)%>
c、 ALS.ST)%>
c、 ALS.P)%>
并将javascript指向正确的字段,但即使这样做有效,问题是部分视图不会包含它需要的所有内容,我必须在放置部分视图的每个主视图中实现这些隐藏字段

如何处理


Bestgrees

如果用户无法修改所有这些字段,您可以简单地包含一个隐藏字段,其中包含一些id,允许您从数据源取回这些字段。例如:

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

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

谢谢,我知道这一点。这里的问题是在partialView中使用和修改属性。属性不是由常规文本框和下拉列表修改的,而是由javascript修改的。当用户点击菜单上的按钮时,设置将设置为属性和提交的表单。问题是如何将修改后的值从partialview返回到服务中。@SnowJim,好的,这样您就可以使用隐藏字段或AJAX。此外,我将使用编辑器模板代替部分模板,因为它们为默认模型绑定器生成正确的字段名,以便将它们正确绑定到操作参数。如果我将所有内容都放在主视图中,并使用Html.HiddenFor(c=>c.ALS.CP),则所有内容都会正常工作,从javascript修改的CP属性将在提交时返回。但是,当将模型的一部分传递到部分视图时,我使用的是隐藏字段,那么属性在提交时不会返回到服务,这就是我的问题。我不知道如何在提交时将修改后的属性从部分视图返回到服务(部分视图放置在表单中。@SnowJim,这就是我建议您使用编辑器模板而不是部分的原因。我建议您这样做:?但是我的项目在视图\共享中没有EditorTemplate?只需手动添加即可吗?