Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在mvc2中使用复杂模型_Asp.net Mvc - Fatal编程技术网

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.NameModel.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) %>