书签 分享 收藏 举报 版权申诉 / 20

类型MVC Controller与ActionResult的返回值.docx

  • 文档编号:6695915
  • 上传时间:2023-01-09
  • 格式:DOCX
  • 页数:20
  • 大小:52.52KB

3.PartialView

Controller.PartialView()和HtmlHelper.RenderPartial()的不同之处在于前者是再次执行ActionInvoke并返回一个ActionResult结果,后者只是使用现有的ViewContext显示一个视图片段。

而与Controller.Content()的区别是PartialView()使用视图引擎输出一个"动态"的ascx结果。

protectedinternalvirtualPartialViewResultPartialView(stringviewName,objectmodel)

{

  if(model!

=null)

  {

    ViewData.Model=model;

  }

  returnnewPartialViewResult

  {

    ViewName=viewName,

    ViewData=ViewData,

    TempData=TempData

  };

}

publicclassPartialViewResult:

ViewResultBase

{

  protectedoverrideViewEngineResultFindView(ControllerContextcontext)

  {

    ViewEngineResultresult=ViewEngineCollection.FindPartialView(context,ViewName);

    if(result.View!

=null)

    {

      returnresult;

    }

    

    ...

  }

}

和Content()一样,我们通常将其和jQuery等Ajax框架配合使用。

publicclassTestController:

Controller

{

  publicActionResultIndex()

  {

    returnView();

  }

  publicActionResultPart()

  {

    ViewData["time"]=DateTime.Now;

    varmodel=newUser{Name="Tom",Age=13};

    returnPartialView(model);

  }

}

Index.aspx

<%@PageLanguage="C#"Inherits="System.Web.Mvc.ViewPage"%>

//www.w3.org/1999/xhtml">

  Index

  

  

    $(function()

    {

      $("#div1").load("/test/part");

    });

  

  

  

Part.ascx

<%@ControlLanguage="C#"Inherits="System.Web.Mvc.ViewUserControl"%>

<%=ViewData["time"]%>

<%=Model.Name%>;<%=Model.Age%>

4.Redirect/RedirectToAction/RedirectToRoute

Controller提供了几种方式,让我们在不同的Action之间进行跳转。

publicclassMvcApplication:

System.Web.HttpApplication

{

  publicstaticvoidRegisterRoutes(RouteCollectionroutes)

  {

    ...

    routes.MapRoute

    (

      "Test2",

      "Test/T2/{name}/{age}",

      new{controller="Test",action="T2",name="",age=0}

    );

    ...

  }

}

 

方法1:

Redirect()直接用Response.Redirect()完成url跳转。

publicclassTestController:

Controller

{

  publicActionResultIndex()

  {

    returnRedirect("/Test/T2/Tom/23");

  }

  publicActionResultT2(Useruser)

  {

    returnContent(user.Name);

  }

}

相关细节:

protectedinternalvirtualRedirectResultRedirect(stringurl)

{

  ...

  returnnewRedirectResult(url);

}

publicclassRedirectResult:

ActionResult

{

  publicoverridevoidExecuteResult(ControllerContextcontext)

  {

    ...

    stringdestinationUrl=UrlHelper.Content(Url,context.HttpContext);

    context.HttpContext.Response.Redirect(destinationUrl,false/*endResponse*/);

  }

}

方法2:

RedirectToAction()直接使用ActionName进行跳转。

publicclassTestController:

Controller

{

  publicActionResultIndex()

  {

    returnRedirectToAction("T2",new{name="Tom",age=23});

  }

  publicActionResultT2(Useruser)

  {

    returnContent(user.Name);

  }

}

如果目标Action不在当前Controller类,则可以指定目标ControllerName。

returnRedirectToAction("T2",new{controller="Test2",name="Tom",age=23});

相关细节:

protectedinternalvirtualRedirectToRouteResultRedirectToAction(stringactionName,

  stringcontrollerName,RouteValueDictionaryrouteValues)

{

  RouteValueDictionarymergedRouteValues;

  if(RouteData==null)

  {

    mergedRouteValues=RouteValuesHelpers.MergeRouteValues(actionName,

      controllerName,null,routeValues,true/*includeImplicitMvcValues*/);

  }

  else

  {

    mergedRouteValues=RouteValuesHelpers.MergeRouteValues(actionName,

      controllerName,RouteData.Values,routeValues,true/*includeImplicitMvcValues*/);

  }

  returnnewRedirectToRouteResult(mergedRouteValues);

}

publicclassRedirectToRouteResult:

ActionResult

{

  publicoverridevoidExecuteResult(ControllerContextcontext)

  {

    ...

    stringdestinationUrl=UrlHelper.GenerateUrl(RouteName,null/*actionName*/,

      null/*controllerName*/,RouteValues,Routes,context.RequestContext,

      false/*includeImplicitMvcValues*/);

    ...

    context.HttpContext.Response.Redirect(destinationUrl,false/*endResponse*/);

  }

}

可以看到RedirectToRouteResult.ExecuteResult中使用Route相关信息拼接成目标Url后进行跳转。

方法3:

RedirectToRoute()则是直接用MapRoute时定义的RouteName进行跳转。

publicclassTestController:

Controller

{

  publicActionResultIndex()

  {

    returnRedirectToRoute("Test2",new{name

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
MVC Controller与ActionResult的返回值 Controller ActionResult 返回
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:MVC Controller与ActionResult的返回值.docx
链接地址:https://www.bdocx.com/doc/6695915.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开