2010-03-22 34 views
0

我有我的視圖渲染路由像/ controller/action(例如/ Page/Create)這樣的請求,非常經典。當Ajax請求查看時渲染視圖爲字符串

我正在創建一個表單,通過AJAX請求使用jQuery get()加載視圖,所以基本上我需要我的視圖或者準確地說,我的控制器操作在AJAX請求發送時返回純HTML字符串呈現View的路線。我想使用與普通請求相同的視圖,所以我不能創建任何新的視圖。

這就像調用RenderPartial(「MyViewUserControl」),但從JS代碼中。

回答

0

您需要將HTML字符串移至部分視圖,然後在常規視圖中包含部分視圖(如果適用)並在您的操作中呈現部分視圖。

您可能會想要在操作中使用Request.IsAjaxRequest()擴展方法。

要在Javascript中獲取HTML,您可以對操作的URL進行正常的AJAX請求。

0

這裏沒有什麼特別的你需要在這裏做 - 只需要像。正常一樣用.get()來請求你的動作方法,並將你的響應類型設置爲「html」。基於SLAks響應

$.get('<% Url.Action("MyActionMethod") %>', { }, 
    function(data){ 
    alert("Data Loaded: " + data); 
    }, 
    "html") 
+0

這是真的,如果我的意見包括所有的表格代碼,但事實上我有我的表格在ASCX。就像SLaks說的那樣.. – mare 2010-03-22 20:07:32

0

我的答案 - 我這個存檔以供日後參考或幫助別人。

這是我的結構:

1)Create.aspx(的ViewPage)使用的RenderPartial( 「製表CreateEditForm」)來呈現創建/編輯的形式,這是 2)製表CreateEditForm.ascx(該部分) 3)創建檢測正在進行的請求的操作。如果我們正在發出AJAX請求,我們可能不想呈現默認情況下的Create.aspx,而是渲染Tab-CreateEditForm,因爲它僅包含表單標記和字段以及NO頁面指令,頭部,標題和所有Create.aspx中的其他元素。

所以動作看起來是這樣的:

// 
    // GET: /Tab/Create/{tabGroupSlug} 
    [CanReturnModalView] 
    [Authorize(Roles = "Administrators")] 
    public ActionResult Create(string tabGroupSlug) 
    { 
     Tab tab = new Tab(); 
     if (Request.IsAjaxRequest()) 
      return View("Tab-CreateEditForm", tab); // returns partial 

     return View(tab); // returns Create.aspx 
    } 

這是我的編輯操作也使用同樣的技術,因爲編輯視圖(Edit.aspx頁)也使用相同的編輯部分控制。

// 
    // GET: /Tab/Edit/{slug} 
    [CanReturnModalView] 
    [Authorize(Roles = "Administrators")] 
    public ActionResult Edit(string slug) 
    { 
     Tab editing = (Tab) _repository.GetInstance(slug); 
     if (Request.IsAjaxRequest()) 
      return View("Tab-CreateEditForm", editing); // returns partial 

     return View(editing); // returns Edit.aspx 
    }