2015-06-02 14 views
3

是否可以創建一個ajax發佈請求,並在控制器中返回一個模型,然後使用該模型渲染頁面?爲了說明我的意思,說我們有一個簡單的Ajax後:使用ajax後的模型渲染頁面

$.ajax({ 
    url: "/Home/PostReq", 
    data: JSON.stringify(data), 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    dataType: "html", 
    cache: false, 
    async: true, 
    error: function (jqXHR, error, errorThrown) { 
     //display error 
    } 
}) 

和家庭控制器我有:

[HttpPost] 
public ActionResult PostReq(MyModel model) 
{ 
    //do some changes to model 
    //render view with new model 
    return View(model); 
} 

如何實現這一目標?目前,這沒有做什麼,頁面不刷新或重新呈現自己。有沒有可能從ajax請求做到這一點?

我使用ajax但不使用模型綁定表單數據的原因是因爲它是動態的,據我所知我不能動態地將表單數據綁定到模型。

+0

這對preRender服務器端來說會不會更好? (或其他一些asp.net生命週期事件) – atmd

+0

我完全被這個問題弄糊塗了。因此,您向PostReq操作發出了請求,並且在PostReq視圖中想再次調用它?使用相同的型號?這不會是遞歸嗎? –

+0

返回模型,而不是actionresult,並在$ .ajax –

回答

2

是的,當然可以。有幾件事情要記住

的職位畢竟返回查看

1)首先應該是一個局部視圖不完整視圖

2)你必須把一個div容器上你的主查看來自ajax調用的響應部分視圖的附加位置是成功回調。

我的意思是,在你的主視圖,你將有:

<div id="container"> 
<div> 

,並在Ajax調用成功功能附加在容器DIV樣反應:

$.ajax({ 
      url: "/Home/PostReq", 
      data: JSON.stringify(data), 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      cache: false, 
      async: true, 
      error: function (jqXHR, error, errorThrown) { 
       //display error 
      } 
      success: function(response) { 

       $('#container').html(response); 
      } 
     }) 
+1

如果我想重定向到其他視圖,該怎麼辦? – sparta223

+0

或者如果我想在帖子後面進行模型綁定,我不能用ajax – sparta223

+0

這樣做,在這種情況下,您必須從服務器端返回url作爲json,並使用'window.location.href = url從客戶端重定向。 '' –

3

添加success回調到您的$.ajax,這將爲您提供該職位的結果(在這種情況下,HTML),類似:

$.ajax({ 
     url: "/Home/PostReq", 
     data: JSON.stringify(data), 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     dataType: "html", 
     cache: false, 
     async: true, 
     error: function (jqXHR, error, errorThrown) { 
      //display error 
     }, 
     success: function (data, textStatus, jqXHR) { 
      $("body").html(data); 
     } 
    }) 

用局部視圖更容易,而不是取代整個身體。