Asp.net mvc 在mvc2中使用复杂模型
我有:Asp.net mvc 在mvc2中使用复杂模型,asp.net-mvc,Asp.net Mvc,我有: (一) (二) 3) 模型类型的ModelViewUserControl 4) 子模型类型化子模型视图用户控件 5) 页面 我需要: 在页面上显示2个文本框:用于Model.Name和Model.SubModel.Title 我有: 1) 第页: <% Html.RenderPartial("ModelViewUserControl", Model); %> 2) 在ModelViewUserControl中: <%= Html.TextBoxFor(m =>
(一) (二) 3) 模型类型的ModelViewUserControl
4) 子模型类型化子模型视图用户控件
5) 页面 我需要:
在页面上显示2个文本框:用于Model.Name和Model.SubModel.Title 我有:
1) 第页:
<% Html.RenderPartial("ModelViewUserControl", Model); %>
2) 在ModelViewUserControl中:
<%= Html.TextBoxFor(m => m.Name) %>
<% Html.RenderPartial("SubModelViewUserControl", Model.SubModel); %>
m.Name)%%>
3) 在子模型ViewUserControl中:
<%= Html.TextBoxFor(m => m.Title) %>
m.Title)%%>
结果是在控制器的方法中,我有Model.Name==“Bla”,但Model.SubModel==null。 当然,我使用Html.BeginForm() HTML:
确保您的两种操作方法对模型使用相同的数据类型
您的视图可以显示如下文本框字段:
<%: Html.TextBoxFor(m => m.Name) %>
<%: Html.TextBoxFor(m => m.SubModel.Title) %>
m.Name)%%>
m、 子模型.标题)%>
如果您需要更多帮助,请发布您的操作方法和视图。确保您的两种操作方法对模型使用相同的数据类型 您的视图可以显示如下文本框字段:
<%: Html.TextBoxFor(m => m.Name) %>
<%: Html.TextBoxFor(m => m.SubModel.Title) %>
m.Name)%%>
m、 子模型.标题)%>
如果您需要更多帮助,请发布您的行动方法和您的观点。充分利用以下内容。我还在处理这件事 这不是解决这个问题的最简单方法,但是我用于这些事情的调试方法是将action参数更改为FormCollection。那么我会:
StringBuilder sb = new StringBuilder();
foreach (string key in fc.Keys)
{
sb.Append("Key: " + key + " Value: " + fc[key]);
}
并在调试中检查sb的值。这可能是一个浪费时间的错误,但到目前为止,我就是这样跌跌撞撞地度过这段时间的
您遇到的问题是模型绑定。Title输入元素需要命名为类似于[ObjectType]\u[PropertyName]的名称。我不知道为什么Html.TextBoxFor没有处理这个问题。请仔细阅读下面的内容。我还在处理这件事 这不是解决这个问题的最简单方法,但是我用于这些事情的调试方法是将action参数更改为FormCollection。那么我会:
StringBuilder sb = new StringBuilder();
foreach (string key in fc.Keys)
{
sb.Append("Key: " + key + " Value: " + fc[key]);
}
并在调试中检查sb的值。这可能是一个浪费时间的错误,但到目前为止,我就是这样跌跌撞撞地度过这段时间的
您遇到的问题是模型绑定。Title输入元素需要命名为类似于[ObjectType]\u[PropertyName]的名称。我不知道为什么Html.TextBoxFor不能处理这个问题。我建议您使用能让您的生活更轻松的方法,而不是使用
RenderPartial
:
在主要观点中:
<% using (Html.BeginForm()) { %>
<%= Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
子模型的编辑器模板(~/Views/Shared/EditorTemplates/SubModel.ascx
):
m.Title)%%>
我建议您不要使用RenderPartial
,它将使您的生活更轻松:
在主要观点中:
<% using (Html.BeginForm()) { %>
<%= Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
子模型的编辑器模板(~/Views/Shared/EditorTemplates/SubModel.ascx
):
m.Title)%%>
Model.Name==“Name”但Model.SubModel==null您可以编辑您的帖子。当您这样做时,添加一个问题。事实是控制器的操作(在文本框中输入一些信息并提交后)Model.Name==“Name”但Model.SubModel==null您可以编辑您的帖子。当您这样做时,添加一个question.Action方法具有签名(Model Model),它成功地获取了模型的Name属性,但没有获取Model.SubModel.title这两个字段的HTML源代码是什么样子的?名称属性中是否包含整个路径?我假设您使用的是Html.TextBoxFor(),请直接发布一段Html源代码。标签有名称(和相同的ID):“名称”和“标题”。我认为,正确的变体是“Name”和“SubModel.Title”…Action方法有签名(Model Model),它成功地获取了模型的Name属性,但没有获取Model.SubModel.Title这两个字段的HTML源代码是什么样子的?名称属性中是否包含整个路径?我假设您使用的是Html.TextBoxFor(),请直接发布一段Html源代码。标签有名称(和相同的ID):“名称”和“标题”。我想,正确的变体是“Name”和“SubModel.Title”。。。
<%= Html.TextBoxFor(m => m.Title) %>