asp.net-mvc-3 - 检查 ViewBag 是否有属性,以有条件地注入(inject) JavaScript

标签 asp.net-mvc-3 dynamic razor null viewbag

考虑这个简单的 Controller :

Porduct product = new Product(){
  // Creating a product object;
};
try
{
   productManager.SaveProduct(product);
   return RedirectToAction("List");
}
catch (Exception ex)
{
   ViewBag.ErrorMessage = ex.Message;
   return View("Create", product);
}

现在,在我的 Create看,我要查ViewBag对象,看看它是否有 Error属性(property)与否。如果它具有错误属性,我需要在页面中注入(inject)一些 JavaScript,以向我的用户显示错误消息。

我创建了一个扩展方法来检查这一点:
public static bool Has (this object obj, string propertyName) 
{
    Type type = obj.GetType();
    return type.GetProperty(propertyName) != null;
}

然后,在 Create看,我写了这行代码:
@if (ViewBag.Has("Error"))
{
    // Injecting JavaScript here
}

但是,我收到此错误:

Cannot perform runtime binding on a null reference



任何的想法?

最佳答案

您的代码不起作用,因为 ViewBag 是 dynamic object不是“真正的”类型。

以下代码应该可以工作:

public static bool Has (this object obj, string propertyName) 
{
    var dynamic = obj as DynamicObject;
    if(dynamic == null) return false;
    return dynamic.GetDynamicMemberNames().Contains(propertyName);
}

关于asp.net-mvc-3 - 检查 ViewBag 是否有属性,以有条件地注入(inject) JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640927/

相关文章:

javascript - 如何将内联 Razor 表达式插入 Javascript

c# - RedirectPermanent 在 ASP.NET MVC 3 应用程序中导致奇怪的结果

c# - 如何检查 MVC 应用程序的应用程序空闲状态

c# - 结构图错误 : No Default Instance defined for PluginFamily

css - 带有布局的 ASP.NET MVC Razor - CSS 链接但未应用

javascript - 如何将 knockout 模型传递给 jsonresult 参数

.net - 来自程序集 Z 中类型 Y 的方法 X 没有实现

android - 使用 ImageAdapter 以动态/编程方式使用 ImageView 填充 GridView

java - 动态 JTable - 从所有行获取数据

c# - 在 Linq 中使用 .NET 4 动态关键字的好例子?