使用MVC-3,Razor:
- MyController -
public ActionResult Index(String message) // where message = "hello"
{
ViewModel.Test1 = "This is a test";
ViewModel.Test2 = "This is another test. " + message;
}
- Index.cshtml -
@Html.Label((string)View.Test1)
<br />
@Html.Label((string)View.Test2)
为什么它只会呈现以下内容?
<label for="This is a test">This is a test</label>
<br />
在过去的几天里,这让我非常疯狂,似乎毫无意义。必须有这样的理由。
我可以调试它并逐步查看视图。在视图中,我看着这条线被处理,View.Test2的值是“这是另一个测试。你好”。
我有以下情况,我正在做以下事情并且工作正常 (例如)
ViewModel.Something = this.readDataService.GetSomething();
有什么区别?
谢谢,
罗布
答案 0 :(得分:4)
看起来您正在使用预先RC2版本的ASP.NET MVC 3.在RC 2中ViewModel
已更改为ViewBag
(请参阅Scott Guthrie撰写的this post)。< / p>
在ASP.NET MVC 3的早期预览中,我们使用Controller基类上名为“ViewModel”的动态属性以及视图模板中名为“View”的动态属性公开此API。很多人发现有两个不同的名字令人困惑,有几个人也说使用名称ViewModel在这个上下文中令人困惑 - 因为你经常在ASP.NET MVC中创建强类型的ViewModel类,并且它们不使用这个API。
使用RC2,我们在控制器和视图中公开了一个具有相同名称的动态属性 - ViewBag。
看起来您确实尝试使用ViewModel
作为视图的强类型模型。而是创建一个用作模型的类,然后使用@Html.LabelFor
:
public class PersonModel
{
public string Name { get; set; }
}
在控制器中:
PersonModel model = new PersonModel { Name = "John" };
return View(model);
在视图中:
@Html.LabelFor(model => model.Name): @Html.TextBoxFor(model => model.Name)
呈现:
<label for="Name">Name</label>: <input id="Name" name="Name" type="text" value="John" />
HTH