5

我是 asp.net mvc 的新手。我有这个控制器,它接受一些参数,然后返回一个基于输入参数获取数据的视图。

我想将输入参数作为对象接受(例如,我想要一个将这三个参数作为其属性的人类,而不是名字、姓氏和年龄)。现在我的问题是输入参数类(Person 类)是否有资格被称为视图模型?如果是。我是否使返回视图模型成为此类的一部分?

换句话说,下面两种方法中的哪一种更受欢迎

案例1:输入和返回相同的类

public ActionResult GetPersonDetails(Person p)
{

    return View(new Person {....})

}

案例 2:输入和返回的单独类

public ActionResult GetPersonDetails(Person p)
{

    return View(new PersonDetails {....})

}
4

1 回答 1

6

现在我的问题是输入参数类(Person 类)是否有资格被称为视图模型?

是的。

如果是。我是否使返回视图模型成为此类的一部分?

不必要。您可以将不同的视图模型作为控制器操作作为参数的视图传递给视图,尽管这种情况很少见。这实际上取决于您的具体情况,但一般模式如下:

[HttpGet]
public ActionResult Index()
{
    MyViewModel model = ...
    return View(model);
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        // Some validation error occurred => redisplay the same view so
        // that the user can fix his errors
        return View(model);
    }

    // at this stage the view model has passed all validations =>
    // here you could attempt to pass those values to your backend

    // TODO: do something with the posted values like updating a database or something

    // Finally redirect to a successful action Redirect-After-Post pattern
    // http://en.wikipedia.org/wiki/Post/Redirect/Get
    return RedirectToAction("Success");
}
于 2013-08-22T15:40:22.390 回答