【发布时间】:2013-12-18 17:39:35
【问题描述】:
全部,
当通过 AJAX 将表单值发布到我的控制器 (/Contact/Process) 时,模型始终为 null 并且 ModelState.IsValid 始终为 false。不知道为什么模型会为空。 AJAX 帖子正在运行,并且有水合参数。
谢谢
萤火虫
参数
联系方式.Email xxx@example.com
Contact.FirstName John
Contact.LastName Doe
Contact.Message 您好
X-Requested-With XMLHttpRequest
联系提交
视图模型
namespace GuitarCollector.Models.ViewModels
{
public class ContactViewModel
{
public Contact Contact { get; set; }
}
}
模型
namespace GuitarCollector.Models
{
public class Contact
{
//Primary Key
public int Id { get; set; }
[Display(Name = "First name")]
[Required(ErrorMessage = "Please enter your first name")]
public string FirstName { get; set; }
[Display(Name = "Last name")]
[Required(ErrorMessage = "Please enter your last name")]
public string LastName { get; set; }
[Display(Name = "Email address")]
[Required(ErrorMessage = "Please enter your email address")]
public string Email { get; set; }
[Display(Name = "Message")]
[Required(ErrorMessage = "Please enter your message")]
public string Message { get; set; }
public DateTime DateCreated { get; set; }
}
}
表格
<div id="content">
<div id="Status"></div>
@using (Ajax.BeginForm("Process","Contact", new AjaxOptions{ HttpMethod = "POST", UpdateTargetId = "Status"}))
{
@Html.ValidationSummary(true)
<p><span class="required">* All fields are required.</span></p>
<!-- First Name -->
<div>
@Html.LabelFor(model => model.Contact.FirstName) <span class="required">*</span>
</div>
@Html.EditorFor(model => model.Contact.FirstName)
@Html.ValidationMessageFor(model =>model.Contact.FirstName)
<!-- Last Name -->
<div>
@Html.LabelFor(model => model.Contact.LastName) <span class="required">*</span>
</div>
@Html.EditorFor(model => model.Contact.LastName)
@Html.ValidationMessageFor(model =>model.Contact.LastName)
<!-- Email -->
<div>
@Html.LabelFor(model => model.Contact.Email) <span class="required">*</span>
</div>
@Html.EditorFor(model => model.Contact.Email)
@Html.ValidationMessageFor(model =>model.Contact.Email)
<!-- Message -->
<div>
@Html.LabelFor(model => model.Contact.Message) <span class="required">*</span>
</div>
@Html.TextAreaFor(model => model.Contact.Message)
@Html.ValidationMessageFor(model =>model.Contact.Message)
<div>
<input type="submit" name="contact" id="contact" value="Submit" class="btn"/>
</div>
}
</div>
控制者
[HttpPost]
public ActionResult Process(ContactViewModel model)
{
if (ModelState.IsValid)
{
model.Contact.DateCreated = DateTime.Now;
db.Contacts.Add(model.Contact);
db.SaveChanges();
return Content("Success!");
}
return Content("Failure");
}
【问题讨论】:
-
是日期时间
-
尝试将
<input type="submit" name="contact" />name 属性更改为其他内容。 -
谢谢。这是解决方案的一部分。我将提交按钮名称和 id 属性重命名为“contactForm”,并且还必须删除隐藏字段:Contact.Id 和 Contact.DateCreated。请发布您的答案并附上解释
标签: ajax asp.net-mvc asp.net-mvc-3