为什么在JsonResult类中没有主体的ExecuteResult方法

时间:2018-07-13 13:20:06

标签: asp.net-mvc abstract-class actionresult jsonresult

在MVC中,incidentVm.LstSpecialCategories = db.TBL_AssocIncidentSpecialCat .Where(t => t.IncidentId == incidentVm.ID) .Join(db.TBL_SpecialCategories, ik => ik.SpecialCategoriesId, ok => ok.Id, (ik, ok) => ok.SpecialCategory ) .ToList(); 是具有ActionResult抽象方法的抽象类。 当然,ExecuteResult将在继承ExecuteResult的地方实现。

ActionResult正在继承JsonResult类。因此,按照基本规则,我希望在ActionResult类中实现ExecuteResult方法。

请参见以下图片。

ActionResult类 enter image description here

JsonResult类 enter image description here

但是这里JsonResult类中没有ExecuteResult方法的正文或具体实现。但是,该方法是替代方法,但没有正文或实现。

那么这个抽象方法的实际实现在哪里?

2 个答案:

答案 0 :(得分:1)

这就是Visual Studio的行为方式。我们需要启用parituclar设置才能看到我不记得的VS中的内置库源代码,但是您可以看到source code for it here

public override void ExecuteResult(ControllerContext context) {
        if (context == null) {
            throw new ArgumentNullException("context");
        }
        if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
            String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) {
            throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType)) {
            response.ContentType = ContentType;
        }
        else {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null) {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null) {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            response.Write(serializer.Serialize(Data));
        }
    }

答案 1 :(得分:0)

在Visual Studio中,默认情况下看不到内置类的任何实现详细信息。为此,请在您的VS中安装this插件