根据字符串创建ViewBag属性

时间:2011-10-29 00:25:11

标签: asp.net-mvc-3 viewbag

有没有办法根据字符串为ViewBag创建和使用动态属性?

这样的东西
ViewBag.CreateProperty("MyProperty");
ViewBag.Property("MyProperty") = "Myvalue";

谢谢

2 个答案:

答案 0 :(得分:47)

我刚刚发现ViewData可用于为ViewBag创建此类属性

所以要创建属性CityErrorMessage我必须使用

ViewData.Add("CityErrorMessage", MyErrorMessage)

然后在视图中我可以使用

@ViewBag.CityErrorMessage

修改

我动态创建了ViewBag的属性,因为我在列表中收到了带有验证错误的字段名称

所以代码实际上是

foreach (ValidationError err in ValidationErrors)
{
    ViewData.Add(
        string.format("{0}ErrorMsg", err.PropertyName),
        err.ValidationErrorMessage);
}

答案 1 :(得分:-3)

更新:我迟到意识到这段代码来自Nancy项目,而Nancy实现了它自己的ViewBag,所以这段代码不适用于.Net MVC3而且没有回答这个问题。但是,可能有人认为这个问题可以通过转换到Nancy来解决。

我发现ViewBag有一个Add方法,所以你可以这样做:

foreach(var row in model)
            {
                ViewBag.Add(row.resourceName, row.content);
            }