【问题标题】:Why static property of non-static class is not available in razor view MVC为什么非静态类的静态属性在剃刀视图 MVC 中不可用
【发布时间】:2017-06-11 13:33:41
【问题描述】:

我有一个非静态类 Institute,如果对象未传递到此视图中,我将无法使用静态属性 DisplayPicturePath。但是,如果我将静态类与静态方法一起使用,则可以查看。如果我的方法是错误的,有什么建议吗?

[HttpGet]
public ActionResult Create() {      
    //if do not pass institute into view
    //Institute institute = new Institute();
    return View();          
} 

我的剃刀视图有这个

<div class="ui segment">
    <img id="DisplayPicture_img" alt="Institute Picture" class="ui fluid image" src="@Url.Content(Path.Combine(Institute.DisplayPicturePath ,"univeristy.jpg"))" />
</div>

我的课是这样的

public class Institute
{
    public Institute()
    {
        DisplayPicture = "institute.png";
        Scholarships = new List<Scholarship>();
        ModifiedDate = DateTime.Now;
        EntryDate = DateTime.Now;
    }

    [NotMapped]
    public static string DisplayPicturePath
    {
        get
        {
            return @"\\"+ Path.Combine("Content", "images", "DisplayPictures");        
        }
    } 

    [Key]
    [DisplayName("Institute Id")]
    public int InstituteId { get; set; }

    [DisplayName("Institute Name")]
    public string Name { get; set; }}
}

我如何使用另一个静态类来使用这种方式

<div class="ui segment">
    <img id="DisplayPicture_img" alt="intitute Picture" class="ui fluid image" src="@Url.Content(Path.Combine(UtilityMethods.GetDisplayPicturePath(PictureType.Institute),"univeristy.jpg"))" />
</div>

我的静态类是

public static class UtilityMethods
{
    public static string GetDisplayPicturePath(PictureType type) 
    {
        if (type.Equals(PictureType.Institute))
        {
            return @"\\" + Path.Combine("Content", "images", "DisplayPictures", "Institute");
        }
        else if(type.Equals(PictureType.User))
        {
            return @"\\" + Path.Combine("Content", "images", "DisplayPictures", "User");
        }
        else if (type.Equals(PictureType.Scholarship))
        {
            return @"\\" + Path.Combine("Content", "images", "DisplayPictures", "Scholarship");
        }
        else
        {
            return @"\\" + Path.Combine("Content", "images");
        }
    }
}

【问题讨论】:

  • 您看到了什么错误?是否在页面顶部添加了类的命名空间引用?
  • 它是一个空引用错误,就像你不通过视图传递一个非静态属性一样
  • 您是否尝试在服务器代码中访问Institute.DisplayPicturePath 并查看其是否正常工作?
  • 是的,我确实试过了,但它不起作用,我得到空引用错误。但是当使用完整的静态类时,它工作正常..
  • 那么它的问题在静态属性的代码中。尝试返回一些常量字符串,看看它是否有效。

标签: c# asp.net-mvc razor static


【解决方案1】:

这是构建问题或 Chrome 浏览器缓存清除问题,因为静态属性在我的控制器中可用,但由于某种原因在同一时间视图中不可用。

就在晚餐休息和良好睡眠之后。我通过创建大量的测试场景来重新检查它,并发现原始方法毕竟是有效的。

静态属性绝对可以查看。 天气它们是 Method 形式,Const 字符串形式或从 Non-Static 类调用。

【讨论】:

    【解决方案2】:

    如果视图中的属性不是静态的,则不能访问它,除非你在模型中传递它

    `[HttpGet]

    public ActionResult Create() {
    
        //if do not pass institute into view
        Institute institute = new Institute();
    
    institute.DisplayPicturePath=//Whatever value you wanna set here;
        return View(institute);
    
    }`
    

    查看:@model Institute src="@Url.Content(Model.DisplayPicturePath)" />

    【讨论】:

    • OP显然使用的是静态方法,这根本不回答问题。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2015-11-13
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多