对于 MVC4,通过 将ViewModel
用于填充视图的对象发送回控制器的最佳实践方法是POST
什么?
问问题
8706 次
2 回答
5
假设您想要一个带有此视图模型的登录表单:
public class LoginModel
{
[Required]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
public bool RememberMe { get; set; }
}
在视图中使用此视图模型很简单,只需向LoginModel
视图发送一个新实例:
public ActionResult Login()
{
var model = new LoginModel();
return View(model);
}
现在我们可以创建Login.cshtml
视图:
@model App.Models.LoginModel
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.UserName)
@Html.TextBoxFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
@Html.LabelFor(model => model.Password)
@Html.PasswordFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
@Html.CheckboxFor(model => model.RememberMe)
@Html.LabelFor(model => model.RememberMe)
<input type="submit" value="Login" />
}
现在我们必须在控制器中创建一个动作来处理这个表单的帖子。我们可以这样做:
[HttpPost]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
// Authenticate the user with information in LoginModel.
}
// Something went wrong, redisplay view with the model.
return View(model);
}
该HttpPost
属性将确保只能通过发布请求访问控制器操作。
MVC 将使用它的魔力并将视图中的所有属性绑定回一个LoginModel
填充了帖子值的实例。
于 2013-11-02T12:06:40.547 回答
-1
一种方法是让您Post controller
接受它ViewModel
作为其参数,然后将其属性映射到您的域模型。
public class Model
{
public DateTime Birthday {get;set;}
}
public class ViewModel
{
public string Month {get;set;}
public string Day {get;set;}
public string Year {get;set;}
}
控制器
[HttpPost]
public ActionResult Create(ViewModel viewModel)
{
string birthday = viewModel.Month + "/" + viewModel.day + "/" + viewModel.year;
Model model = new Model { Birthday = Convert.ToDateTime(birthday) } ;
// save
return RedirectToAction("Index");
}
于 2013-11-02T04:57:51.853 回答