Asp.net mvc post调用中的编辑器模板未正确传递模型
大家好,两天前有人帮我提出了一个解决方案,使用razor使用编辑器模板从域模型中的列表生成几个文本框,我添加了一些js,使其更具动态性,但当我在控制器中对action方法进行post调用时,它不会刷新文本字段中的值,我会在这里放一些代码也许你知道问题出在哪里 这就是我想要实现的目标Asp.net mvc post调用中的编辑器模板未正确传递模型,asp.net-mvc,razor,Asp.net Mvc,Razor,大家好,两天前有人帮我提出了一个解决方案,使用razor使用编辑器模板从域模型中的列表生成几个文本框,我添加了一些js,使其更具动态性,但当我在控制器中对action方法进行post调用时,它不会刷新文本字段中的值,我会在这里放一些代码也许你知道问题出在哪里 这就是我想要实现的目标 //反机器人字段 公共字符串Customer{get;set;} public int ContentItemId{get;set;} 公共字符串标题{get;set;} 公共字符串说明{get;set;} pub
//反机器人字段
公共字符串Customer{get;set;}
public int ContentItemId{get;set;}
公共字符串标题{get;set;}
公共字符串说明{get;set;}
public int UserId{get;set;}
公共字符串称呼{get;set;}
公共字符串名{get;set;}
公共字符串Lastname{get;set;}
公共字符串电子邮件{get;set;}
[显示(Name=“收件人”)]
公共列表收件人{get
{返回新列表
{
新收件人{Name=”“,Email=”“},
//x10
};
}
}
[必需]
[显示(Name=“Nachricht”)]
公共字符串消息{get;set;}
}
公共类收件人{
[显示(Name=“收件人姓名:”)]
公共字符串名称{get;set;}
[显示(Name=“收件人电子邮件地址:”)]
[数据类型(数据类型.电子邮件地址)]
公共字符串电子邮件{get;set;}
}
每个输入字段都具有以下属性
因此,我最多有十个字段,每个字段都有一个id收件人(1\u 10)\姓名/电子邮件
这是我的看法
@using (Html.BeginForm("Submit", "Share"))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.UserId)
@Html.HiddenFor(m => m.ContentItemId)
@Html.TextBoxFor(m => m.Customer, new { @class = "b2a534d1" })
<p>Hi: @Html.DisplayTextFor(m => m.Salutation) @Html.DisplayTextFor(m => m.Firstname) @Html.DisplayTextFor(m => m.Lastname)</p>
<table border="0" style="padding:5">
<tr>
<td class="editor-label">@Html.LabelFor(m => m.Title): </td>
<td class="editor-field">@Html.DisplayTextFor(m => m.Title)
</td>
</tr>
<tr>
<td class="editor-label">@Html.LabelFor(m => m.Description): </td>
<td class="editor-field">@Html.DisplayTextFor(m => m.Description)
</td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.Message)</td>
<td>@Html.TextAreaFor(m => m.Message)</td>
</tr>
</table>
<table >
@Html.EditorFor(m => m.Recipients)
</table>
<table>
<tr>
<td>
<a href="#" id="add-recipient" class="small button">Add Recipient</a></td>
<td><input type="submit" class="button med primary" style="float: right;" value="ABSENDEN" /></td>
</tr>
</table>
}
@使用(Html.BeginForm(“提交”、“共享”))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m=>m.UserId)
@Html.HiddenFor(m=>m.ContentItemId)
@Html.TextBoxFor(m=>m.Customer,新的{@class=“b2a534d1”})
您好:@Html.DisplayTextFor(m=>m.saltation)@Html.DisplayTextFor(m=>m.Firstname)@Html.DisplayTextFor(m=>m.Lastname)
@Html.LabelFor(m=>m.Title):
@DisplayTextFor(m=>m.Title)
@Html.LabelFor(m=>m.Description):
@DisplayTextFor(m=>m.Description)
@LabelFor(m=>m.Message)
@Html.TextAreaFor(m=>m.Message)
@EditorFor(m=>m.Recipients)
}
这是我的收信人
@model PetterLetter.Application.Models.Recipient
<p class="recipient"> Name: @Html.EditorFor(x=>x.Name) Email: @Html.EditorFor(x => x.Email) </p>
@model PetterLetter.Application.Models.Recipient
名称:@Html.EditorFor(x=>x.Name)电子邮件:@Html.EditorFor(x=>x.Email)
在我调试解决方案之后,这就是我从视图的模型中得到的
此收件人应在编辑器模板的输入字段中输入值
我做错了什么?我在动态加载表单时遇到了类似的问题,可以从 结果是,当加载多个表单时,必须为它们指定不同的索引值(而不是每次[0])
我已经解决了这个问题,为集合索引使用了隐藏字段,并为其指定了一个唯一的值。它实际上可以是任何东西,比如日期时间字符串,只要在每个输入名称中也使用索引值。阅读链接文章,特别是非顺序索引部分。我在动态加载表单时遇到类似问题,可以从 结果是,当加载多个表单时,必须为它们指定不同的索引值(而不是每次[0])
我已经解决了这个问题,为集合索引使用了隐藏字段,并为其指定了一个唯一的值。它实际上可以是任何东西,比如日期时间字符串,只要在每个输入名称中也使用索引值。阅读链接文章,特别是非顺序索引部分。它们不是每次在每个项目上增加时都为0:S我无论如何都会阅读链接啊。有一件事可能会有所帮助,那就是查看回发的表单数据。问题可能不在模型绑定中。如果您有chrome developer tools或firebug,并打开调试器,调试器一停止页面,就检查请求表单数据。如果要回发的表单数据看起来不错,那么可能是模型绑定器或其他东西。请注意,模型的收件人集合似乎没有setter。可能还需要补充一点。我用Gliesh查看请求,这就是我在模型对象@brightwarden中得到的结果,就是这样!我想为一些简单的事情自杀:(总共浪费了一天,但至少做得很好,非常感谢!它们不是0,每次它们在每个项目上都增加:S我无论如何都会阅读链接啊。一件可能有用的事情是查看发回的表单数据。问题可能不在模型绑定中。如果您有chrome developer工具或firebug,并打开调试器,调试器停止页面后,立即检查请求表单数据。如果正在回发的表单数据看起来不错,则可能是模型绑定器或其他原因。刚刚注意到,您模型的Recipients集合似乎没有setter。可能需要添加setter。我用Gliesh查看请求,这就是我在model objec中得到的结果t@brightwarden就是这样!我想为一些事情自杀。很简单:(浪费了整整一天,但至少做得很好,非常感谢!
@model PetterLetter.Application.Models.Recipient
<p class="recipient"> Name: @Html.EditorFor(x=>x.Name) Email: @Html.EditorFor(x => x.Email) </p>