MVC-3和Dynamic - @ Html.Label(View.X)没有渲染

时间:2011-03-03 04:24:31

标签: dynamic asp.net-mvc-3 razor

使用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();

有什么区别?

谢谢,

罗布

1 个答案:

答案 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