Asp.net mvc 4 过帐表单上的MVC模型属性为空
我正在开发一个MVC4应用程序,但在使用强视图模型提交表单时遇到了问题 我正在调用一个局部视图,其中在GetActionResult中声明一个模型实例,并将其传递给局部视图,并将字段存储在隐藏字段中。 调试时,我看到所有字段都得到了值,并且工作正常 用户提交表单后,我使用此模型属性加上用户填写的属性 问题在于,调用post操作结果时,To列表变为null 控制器:Asp.net mvc 4 过帐表单上的MVC模型属性为空,asp.net-mvc-4,model,Asp.net Mvc 4,Model,我正在开发一个MVC4应用程序,但在使用强视图模型提交表单时遇到了问题 我正在调用一个局部视图,其中在GetActionResult中声明一个模型实例,并将其传递给局部视图,并将字段存储在隐藏字段中。 调试时,我看到所有字段都得到了值,并且工作正常 用户提交表单后,我使用此模型属性加上用户填写的属性 问题在于,调用post操作结果时,To列表变为null 控制器: [HttpGet] public ActionResult MessageDetails(string id)
[HttpGet]
public ActionResult MessageDetails(string id)
{
MessageModel m;
string userfullname = String.Empty;
ServiceReference2.WebService1Soap ws = new ServiceReference2.WebService1SoapClient();
DataTable dt = ws.GetMessageDetails("bcce7f7ad7596f963f4adb23d713e0d4", "329392de8a55edf86c0881a57381cbe6",id,User.Identity.Name).Tables[0];
if (Session["user"] != null)
userfullname = ((HaifanetMobile.Models.LoginModel)Session["user"]).LoginDS.Tables[0].Rows[0][((HaifanetMobile.Models.LoginModel)Session["user"]).LoginDS.Tables[0].Columns["fullname"].Ordinal].ToString();
m = new MessageModel(dt, User.Identity.Name, userfullname);
return PartialView("MessageDetails",m);
}
[HttpPost]
public ActionResult ReplyMessage(MessageModel model)
{
// here's where the To list is getting empty
var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
model.Send();
return Content("Success");
}
return PartialView("MessageDetails",model);
}
观点:
@model HaifanetMobile.Models.MessageModel
<script type="text/javascript">
function showMessagesPanel1() {
$('#messagedetails_panel').toggle();
$("#messages_panel").show();
}
$(function () {
$('form').submit(function () {
$.validator.unobtrusive.parse($('form')); //added
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
alert("Message Sent");
},
error: function () {
alert("Error");
}
});
}
return false;
});
});
</script>
<table id="messages_panel_mbar" cellpadding="0" cellspacing="0">
<tr>
<td class="left_mbar">
</td>
<td class="main_mbar">
</td>
<td id="back_msg_details" class="right_mbar"></td>
</tr>
</table>
<div style="height:10%; width:100%; font: bold; font-size: 20px; text-align:right;"> @Html.Raw(Model.Subject)</div>
<div id="msg_chat" style="text-align:right; width:100%; height:auto; max-height:80%; overflow-y:scroll;">
@Html.Raw(Model.MsgHistory)
</div>
<div id="reply_msg" style="height: 5%">reply</div>
<div id="reply_msg_block" class="visible" style="width:100%; height:45%;">
@using (Ajax.BeginForm("ReplyMessage", "SettingsMenu", null, new AjaxOptions { }, new { @class = "center_form" }))
{
@Html.ValidationSummary(true, "");
<fieldset style="height:75%">
@Html.Hidden("Subject", Model.Subject)
@Html.Hidden("ParentId", Model.ParentId)
@Html.Hidden("From", Model.From)
@Html.Hidden("fullnamesender", Model.fullnamesender)
@Html.Hidden("To", Model.To)
<div id="textarea_msg_reply">
@Html.TextAreaFor(m => m.Content, new { @class = "" })
@Html.ValidationMessageFor(m => m.Content)
</div>
</fieldset>
<input type="submit" value="send" />
}
</div>
@model HaifanetMobile.Models.MessageModel
函数showMessagesPanel1(){
$('#messagedetails_panel')。toggle();
$(“#消息#面板”).show();
}
$(函数(){
$('form')。提交(函数(){
$.validator.unobtrusive.parse($('form');//已添加
if($(this).valid()){
$.ajax({
url:this.action,
类型:this.method,
数据:$(this).serialize(),
成功:功能(结果){
警报(“已发送消息”);
},
错误:函数(){
警报(“错误”);
}
});
}
返回false;
});
});
@Html.Raw(Model.Subject)
@Html.Raw(Model.MsgHistory)
回复
@使用(Ajax.BeginForm(“ReplyMessage”、“SettingsMenu”、null、新的AjaxOptions{}、新的{@class=“center_form”}))
{
@Html.ValidationSummary(true,“”);
@Html.Hidden(“Subject”,Model.Subject)
@Html.Hidden(“ParentId”,Model.ParentId)
@Html.Hidden(“From”,Model.From)
@隐藏(“fullnamesender”,Model.fullnamesender)
@Html.Hidden(“To”,Model.To)
@Html.TextAreaFor(m=>m.Content,新的{@class=”“})
@Html.ValidationMessageFor(m=>m.Content)
}
模型:
public class MessageModel
{
public string From { get; set; }
[Required(ErrorMessage = "Enter To")]
public List<Contact> To { get; set; }
[Required(ErrorMessage = "Enter Subject")]
[StringLength(100, ErrorMessage = "Max 1000 chars")]
public string Subject {get; set;}
[StringLength(1000, ErrorMessage = "Max 1000 chars")]
public string Content { get; set; }
public string MsgHistory { get; set; }
public string fullnamesender { get; set; }
public string ParentId { get; set; }
public DateTime LastMsgDate { get; set; }
public bool readed = false;
} // I omitted the constructors....
公共类消息模型
{
来自{get;set;}的公共字符串
[必需(ErrorMessage=“回车”)]
要{get;set;}的公共列表
[必需(ErrorMessage=“输入主题”)]
[StringLength(100,ErrorMessage=“最大1000个字符”)]
公共字符串主题{get;set;}
[StringLength(1000,ErrorMessage=“最大1000个字符”)]
公共字符串内容{get;set;}
公共字符串MsgHistory{get;set;}
公共字符串fullnamesender{get;set;}
公共字符串ParentId{get;set;}
公共日期时间LastMsgDate{get;set;}
公共bool readed=false;
}//我省略了构造函数。。。。
看看这个问题和答案
HiddenFor通常更易于使用,但它本身无法解决您的问题。回发后,应该为要使用的每个列表项的每个属性放置一个隐藏项
但是,我不推荐这种方法。您应该只为原始邮件的标识符放置一个隐藏字段,并在回发后查找收件人列表