Model(变量)做什么?

时间:2010-12-18 00:11:25

标签: c# asp.net asp.net-mvc visual-web-developer

好的,所以我有这个代码:

    public ActionResult Welcome(string name = "", int numTimes = 1)
    {
        var viewModel = new WelcomeViewModel
        {
            Message = "Hello " + name,
            NumTimes = numTimes
        };

        return View(viewModel);
    }
    public class WelcomeViewModel
    {
        public string Message { get; set; }
        public int NumTimes { get; set; }
    }

和Welcome()中的视图是:

<h2>Welcome</h2>

<% for(int i = 0; i < Model.NumTimes; i++) {%>

    <h3><%: Model.Message; %></h3>
<%} %>

首先,当我运行这个时,运行时出现错误... /欢迎?name = Scott&amp; numtimes = 4在行中说

<h3><%: Model.Message; %></h3>

它期待')'

  

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。   编译器错误消息:CS1026 :)预期

为什么会这样?


其次这整个模型是什么?它做了什么?

4 个答案:

答案 0 :(得分:2)

我认为您不需要在Model.Message之后放置分号。

模型是您在控制器中提供给视图的参考。这与您在控制器中键入return View(viewModel);的实例相同。

答案 1 :(得分:2)

这是因为<%: Model.Message; %>将(基本上)翻译成:

Response.Write(Model.Message;);

如您所见,分号不应该在那里。编译器在分号之前需要结束括号,因此出现错误消息。

“Model thing”是MVC中的M.模型是视图显示的数据。每个视图都有一个模型,因此模型包含View所需的所有数据。

答案 2 :(得分:0)

关于你的第二个问题,MVC是一种将逻辑(在你的控制器中)与演示文稿分开的方式(在你看来)。

您可以使用控制器生成包含视图所需的所有信息的模型。

例如,对于表单,模型将为每个输入都有一个字段。对于表格,它会有IEnumerable<SomeRowClass>等...

视图本身应该尽可能少地处理 - 简单的if语句和循环。所有实际逻辑都应该被约束到控制器。

一种思考方式是开发人员编写控制器,设计人员编写视图,然后他们就模型中的内容进行协作 - 设计师说“我需要知道X,Y,Z” - 所以开发人员添加它们适用于模型并根据需要填充字段

正如在另一个答案中所提到的,Model.Message之后的分号是多余的。

答案 3 :(得分:0)

除了错误的分号外,请确保您的视图定义为继承自ViewPage<WelcomeViewModel>。这指定了Model在视图中的类型,允许编译器解析其成员(MessageNumTimes)。