1

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

    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>
<%} %>

首先,当我运行它时,运行时出现错误 .../Welcome?name=Scott&numtimes=4 在行中说

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

它期望')'

说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。编译器错误消息:CS1026:) 预期

为什么是这样?


其次,这整个模型是什么?它有什么作用?

4

4 回答 4

2

我认为您不需要将分号放在Model.Message.

模型是对您在控制器中提供给视图的内容的引用。return View(viewModel);这与您在控制器中键入的内容相同。

于 2010-12-18T00:16:42.780 回答
2

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

Response.Write(Model.Message;);

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

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

于 2010-12-18T00:37:13.597 回答
0

关于您的第二个问题,MVC 是一种将逻辑(在您的控制器中)与演示文稿(在您的视图中)分离的方法。

您使用控制器生成一个模型,其中包含视图所需的所有信息。

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

视图本身应该做尽可能少的处理——简单的 if 语句和循环。所有实际逻辑都应限制在控制器上。

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

如另一个答案中所述,后面的分号Model.Message是多余的。

于 2010-12-18T00:16:47.340 回答
0

除了放错位置的分号之外,请确保您的视图被定义为继承自ViewPage<WelcomeViewModel>. 这指定了Model视图中的类型,允许编译器解析其成员(Message, NumTimes)。

于 2010-12-18T01:22:01.957 回答