好的,所以我有这个代码:
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 :)预期
为什么会这样?
其次这整个模型是什么?它做了什么?
答案 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
在视图中的类型,允许编译器解析其成员(Message
,NumTimes
)。