簡體   English   中英

make controller actions'“return partialview()”自動鏈接到asp.net mvc3中的“_partialview.cshtml”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM