C#学习教程:ASP.NET MVC – HybridViewResult(ViewResult / PartialViewResult)分享


ASP.NET MVC – HybridViewResult(ViewResult / PartialViewResult)

是否有可能构建一个混合的ViewResult,它返回AjaxRequest或HttpRequest的一个PartialViewResultViewResult

IsAjaxRequest – >返回PartialViewResult!IsAjaxRequest – >返回ViewResult

据我所知,我的HybridViewResult应该来自ViewResultBase。

但是如何实现FindView方法呢?

尝试:

 public class HybridViewResult : ActionResult { public string ViewName { get; set; } public HybridViewResult () { } public HybridViewResult (string viewName ) { this.ViewName = viewName ; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); var usePartial = ShouldUsePartial(); ActionResult res = GetInnerViewResult(usePartial); res.ExecuteResult(context); } private ActionResult GetInnerViewResult(bool usePartial) { var view = ViewName; ActionResult res; if(String.IsNullOrEmpty(view)) { res = usePartial ? new PartialViewResult(view) : new ViewResult(view); } else { res = usePartial ? new PartialViewResult() : new ViewResult(); } return res; } private bool ShouldUsePartial(ControllerContext context) { return false; //your code that checks if you need to use partial here } } 

根据需要添加任何构造函数和GetInnerViewResult变量,即传递Model。

对于eglasius的回答,这是一个稍微简单的考虑。 我实际上正在解决类似的问题,除了我需要返回一个JsonResult。

(未经测试的)NormalOrAjaxResult只允许您为非ajax请求指定一个操作结果,为ajax请求指定一个操作结果。 因为这些是ActionResults,您可以混合Redirect,View,Partial和Json视图结果。

 public class NormalOrAjaxResult : ActionResult { private readonly ActionResult _nonAjaxActionResult; private readonly ActionResult _ajaxActionResult; public NormalOrAjaxResult(ActionResult nonAjaxActionResult, ActionResult ajaxActionResult) { _nonAjaxActionResult = nonAjaxActionResult; _ajaxActionResult = ajaxActionResult; } public override void ExecuteResult(ControllerContext context) { var isAjaxRequest = context.HttpContext.Request["isAjax"]; if (isAjaxRequest != null && isAjaxRequest.ToLower() == "true") { _ajaxActionResult.ExecuteResult(context); } else { _nonAjaxActionResult.ExecuteResult(context); } } } 

在这种情况下,你不能只做两个不同的行动吗? 您可以简单地将[nonAction]共享]逻辑放入[nonAction]方法中?

我知道我在这里参加派对的时间已经很晚了,但这些对我来说似乎不太合适,所以这是我的2美分:

 public class PartialViewConverter : ViewResult { public ViewResultBase Res { get; set; } public PartialViewConverter(ViewResultBase res) { Res = res; } public override void ExecuteResult(ControllerContext context) { Res.ExecuteResult(context); } public static ViewResult Convert(ViewResultBase res) { return new PartialViewConverter(res); } } 

用法:

 return PartialViewConverter.Convert(PartialView()); 

如果覆盖View,则在控制器中

 protected override ViewResult View(string viewName, string masterName, object model) { //Whichever condition you like can go here if (Request.QueryString["partial"] != null) return PartialViewConverter.Convert(PartialView(viewName, model)); else return base.View(viewName, masterName, model); } 

您返回视图的任何操作方法都会在请求时自动返回partials:

上述就是C#学习教程:ASP.NET MVC – HybridViewResult(ViewResult / PartialViewResult)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 public ActionResult Index() { ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; //This will return a partial if partial=true is passed in the querystring. return View(); } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031430.html

发表评论

邮箱地址不会被公开。 必填项已用*标注