我有一个部分视图,其中包含一个包含以下字段的注册表单:
我在不使用View Model的情况下使用jQuery Ajax发布表单。
问题:在他的上下文中不使用View Model是一种好方法吗?
问题:在单元测试用例的情况下,我的方法是否无效?
的jQuery
$.ajax({
url: "@Url.Action("Action", "Controller", new { area = "Area" })",
type: "POST",
contentType: 'application/json; charset=utf-8',
dataType: "json",
data: JSON.stringify({mail : "mails", nam : nam ......}),
traditional: true,
success: function (data) {
alert("wsaved");
}
});
[HpPost]
public Actionresult abc(string mail, string nam, sring lasnam)
{
return Json(new {succss = ru});
}
答案 0 :(得分:1)
在他的上下文中不使用View Model是一种好方法吗?
不,它会使验证变得更加困难。假设您要验证电子邮件是否为空并且确实是有效的电子邮件地址。如果您使用了视图模型,那么您所要做的就是使用正确的验证属性修饰视图模型上的Email
属性。使用您的方法,您现在必须在控制器操作中编写几行无用的代码。
以下是您的视图模型的外观:
public class RegisterUserViewModel
{
[Required]
[RegularExpression("PUT YOUR REGEX TO VALIDATE AN EMAIL HERE")]
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
[RegularExpression("PUT YOUR REGEX TO ENFORCE SOME PASSWORD STRENGTH")]
public string Password { get; set; }
}
现在您的控制器操作变为:
[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
if (!ModelState.IsValid)
{
// validation failed
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new
{
Key = x.Key,
Errors = x.Value.Errors.Select(e => e.ErrorMessage)
}
);
return Json(new { success = false, errors = errors });
}
return Json(new { success = true });
}
答案 1 :(得分:0)
如果您正在使用带有MVC 4的ApiController,那么您可以使用模型绑定到,默认使用Newton Json.NET。
ResponseModel
[DataContact]
public class ResponseModel
{
[DataMember]
public string Status { get; set; }
}
ActionModel
[DataContact]
public class RegisterUserViewModel
{
[Required]
[DataMember(isRequired=true)]
public string Email { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[Required]
[DataMember(isRequired="true")]
public string Password { get; set; }
}
ApiController Action
[HttpPost]
public ReponseModel Register(RegisterActionModel actionModel)
{
if (this.ModelState == valid)
{
//do stuff
return new ResponseModel()
{
Status = "OK"
};
}
else
{
return new ResponseModel()
{
Status = "Invalid Data"
}
}
}