[英]make controller actions' “return partialview()” automatically link to a “_partialview.cshtml” in asp.net mvc3
我正在MVC3中編寫一個頁面,有幾個地方我想在ajax和url欄中請求頁面。
如果請求是完整頁面請求,我希望Action呈現“Example.cshtml”,這是一個完整視圖。 但是請求是一個ajax請求我只想呈現“_Example.cshtml”,這是一個局部視圖。
我的代碼是
if (Request.IsAjaxRequest())
{
return PartialView("_Example");
}
return View();
但由於MVC3完全是關於約定的,並且一切都是可重新配置的,我希望能夠編寫
if (Request.IsAjaxRequest())
{
return PartialView();
}
return View();
並且如果它是局部視圖,仍然加載“_Example.cshtml”。 無論如何,我將所有部分視圖命名為“_Something.cshtml”,如果我可以調用PartialView(),它就不會更清晰; ?
請告訴我這是可能的。 並告訴我如何。
編輯:
我仍然希望能夠使偏見視圖與視圖不同,因此只有少數情況下切換母版頁就足夠了。
我想做一些事情,比如重載默認路徑以查找偏見,例如:
PartialViewLocationFormats = new[] {
"~/Views/{1}/_{0}.ascx",
};
但這會影響PartialView(“Example”)使用_Example.cshtml,這是不可取的。
編輯:
我嘗試的另一件事是重載控制器的PartialView()和PartialView(對象模型)方法,但是它們不能被覆蓋,我也找不到找到它們調用的動作的正確方法。
你見過這個嗎? 它可能有助於您正在尋找的東西。
我在這個問題上寫了一個非常實質的答案: 簡單的ASP.NET MVC CRUD在JavaScript UI對話框中查看打開/關閉
基本上,您調整視圖引擎以打開常規請求的完整“主題”視圖,然后返回視圖,但是當請求通過ajax完成時,使用空主控。
您可以創建一個ActionFilterAttribute:
public class AjaxResultActionFilter: ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var result = filterContext.Result as ViewResult;
result.ViewName = "_" + result.ViewName;
filterContext.Result = result;
}
else
{
base.OnResultExecuting(filterContext);
}
}
}
如果IsAjaxRequest返回true,這將追加MVC嘗試解析的ViewName前面的“_”。
您現在需要做的就是用這個屬性裝飾你的動作或控制器:
[AjaxResultActionFilter]
public ActionResult Index()
{
return View("Index");
}
現在,我在運行中編寫了這個,所以在這個版本中它只在你將ViewName實際傳遞給return View()
語句時才有效。
通過一些調試和更多的時間,我相信這可以修復:)
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.