1

我正在研究 ASP.net MVC 。在这里,M 仅代表“型号”。可以映射到数据库的模型。

通常,我将我的 View 与 Model 强烈绑定。

但是,最近我听说 View Model 与 Model 不同。

ViewModel 是MVCMVVM(ModelViewViewModel) 的一部分吗?

ViewModel 和 Model 之间的基本区别是什么。我想举一个小例子来说明我在 MVC 中的工作方式:

我的观点:

<% using (Ajax.BeginForm("TestAjax", "Reviewer", new AjaxOptions { OnSuccess = "Callback", OnFailure = "Failed" }))
   { %>
<table align="center">
    <tr>
        <td class="tdCol1Align">
            <label>
                Number1</label>
        </td>
        <td class="tdCol2Align">
            <%=Html.TextBoxFor(Model => Model.number1)%>
        </td>
    </tr>
    <tr>
        <td class="tdCol1Align">
            <label>
                Number2</label>
        </td>
        <td class="tdCol2Align">
            <%=Html.TextBoxFor(Model => Model.number2)%>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="Add" class="button" />
        </td>
    </tr>
</table>
<%
    }
%>

我的模型:

public class AddModel
    {
        public int number1
        {
            get;
            set;
        }

        public int number2
        {
            get;
            set;
        }

    }

最后是我的控制器

   [HttpPost]
        public JsonResult TestAjax(AddModel model)
        {

            int iSum = model.number1 + model.number2;
            return Json(new { Sum = iSum });

        }

而已 。我无法理解这是在哪里ViewModel出现的图片

请澄清以下内容:

1.ViewModel和Model的基本区别

2.View Model 是 MVC 还是 MVVM 架构的一部分?

  1. 如果使用 ViewModels,如何实现上述示例?

  2. 如果视图模型是 MVC 的一部分,那么它们将在应用程序的文件夹结构中的什么位置?

4

4 回答 4

4

ViewModel 是 MVC 还是 MVVM (ModelViewViewModel) 的一部分?

ViewModel 是 MVC 中的 M。

ViewModel 和 Model 之间的基本区别是什么。

可以映射到数据库的模型不是 MVC 中的 M。这是一个领域或业务模型。您应该从控制器操作传递给您的视图的是视图模型。单个视图模型可以是多个域模型的组合。

我无法理解这个 ViewModel 进入图片的位置

在此示例中,视图模型是您在此处创建的匿名类型:

return Json(new { Sum = iSum });

基本上,它是一个具有单个属性的类,称为Sum. 如果您定义一个实际的视图模型而不是使用匿名类型,也许会更清楚:

public class ResultViewModel
{
    public int Sum { get; set; }
}

您的控制器操作可能已传递给视图:

[HttpPost]
public JsonResult TestAjax(AddModel model)
{
    int iSum = model.number1 + model.number2;
    ResultViewModel viewModel = new ResultViewModel();
    viewModel.Sum = iSum;
    return Json(viewModel);
}

但由于在这种情况下没有实际视图而是 JSON 结果,因此使用匿名类型就可以了。

于 2013-10-25T11:31:50.400 回答
1

MVC 中的模型不仅仅是一个类(POCO),它代表数据库中的一个(或多个)表。是一层。它包含应用程序的所有业务、验证和数据访问逻辑。它还由域模型组成,这些模型确实代表数据库表。

当您的应用程序增长并且您需要更多的灵活性和复杂的视图时,域模型通常不适合在视图中使用它。特别是当您添加与数据库验证不同的验证属性时,或者当您的视图包含多个域模型的属性时。以登录视图为例,您不想在User这里使用域模型,而是使用专门的视图模型,其中只包含视图所需的属性:

public class LoginModel
{
    [Required]
    public string Username { get; set; }    

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    public bool RememberMe  { get; set; }
}
于 2013-10-25T11:43:39.993 回答
1

MVC 的视图模型与 MVVM 的视图模型不同。

对于 MVC,视图模型是一种特定于一个或多个视图的模型。我们通常所说的“模型”是实体,也被您的业务层和数据访问层使用。但很多时候,它们不太适合向用户显示数据,因为视图可能有特定的需求。您可能需要组合多个实体,进行一些转换,然后创建一个仅包含所需数据的视图模型。视图应该得到一个视图模型,其中包含准备好显示的数据,它不应该做额外的过程。

于 2013-10-25T11:37:37.967 回答
1

简单的解释是

模型:它定义为您可以定义从数据库读取值的属性(就像数据访问层一样)

视图模型:它定义为您可以定义视图(UI)读写值的属性(就像业务逻辑层一样)

编辑:

如果你使用 MVVM 模式,那么你会在解决方案资源管理器中手动创建一个名为 ViewModel 的文件夹,但是如果你使用 MVC 模式,那么模型会在解决方案资源管理器中自动创建,

Model 文件夹有数据库相关的类(包括一些读取和写入数据到数据库的方法),View Model 有我们的业务逻辑和 UI 相关的类(包括一些属性用于读取和写入视图(UI)的值,而 View 有我们的 html 或MVVM 模式中的任何页面

模型具有数据库类以及业务逻辑和 UI 相关类,视图具有我们的 html 或MVC 模式中的任何页面

于 2013-10-25T11:47:22.197 回答