2013-07-10 92 views
0

我目前使用的ViewModels綁定到我所有的CRUD操作,但也有一些操作方法僅返回部分觀點:如何確定使用ViewModels重定向到哪個視圖?

public ActionResult Create(int parentId) 
{ 
    var viewModel = new MyCreateViewModel(); 
    return PartialView("_Create", viewModel); 
} 

這些行動將通過AJAX的不同意見(不同的實體)被調用,顯示在jQuery對話框中。該對話框按鈕將通過$("#form").submit()處理POST ING形式,而另一種操作方法將處理表單,理想重定向到調用局部視圖父視圖:

[HttpPost] 
public ActionResult Create(int parentId, MyCreateViewModel viewModel) 
{ 
    //Process the viewModel, map to EF models and persist to the database 

    return RedirectToAction(/*What should I insert here?*/); 
} 

因爲我不知道是哪個視圖是POST ing這個方法,我怎麼知道我應該重定向到哪個視圖?

回答

1

我將一個字符串屬性添加到您的視圖模型包含要返回視圖的名稱

[HttpPost] 
public ActionResult Create(int parentId, MyCreateViewModel viewModel) 
{ 
    //Process the viewModel, map to EF models and persist to the database 

    return RedirectToAction(viewModel.ViewToRender); 
} 
+0

我曾經想過這個選項。這是否意味着我還應該傳遞一個額外的參數來存儲'GET'操作方法的視圖名稱?有沒有更好的方法來實現這一目標? – rexcfnghk

+0

我想啓動帖子的視圖會知道重定向到哪個視圖,所以我想沒有必要在GET中爲每個特定的主開始返回。我想不出一個更簡單的方法來做到這一點,除非你可以以某種方式從你的視圖模型中的其他數據推斷它 – TGH

+0

對不起,我有點困惑......如果視圖名稱沒有在'GET'操作中傳遞方法,那麼我應該在哪裏填充你的'viewModel.ViewToRender'屬性? – rexcfnghk

1

您可以在客戶端的重定向而不是做的是,在操作方法。 在操作方法中,您可以返回一個結果,指示操作成功或失敗。在客戶端,使用$ .ajax來處理結果

 $('#form').submit(function() { 
     var self = $(this); 
     if (self.valid()) { 
      $.ajax({ 
       type: "POST", 
       url: self.attr('action'), 
       data: self.serialize(), 
       success: function (data) { 
        if (data.Success == true) { 
         //redirect 
        } else{ 
         //Error handling 
        } 
       }, 
       error: function (ex) { 
         //Error handling 
       } 
      }); 
     } 
     return false; 
    }); 
+0

原始發佈操作必須返回某些內容。 – TGH

+0

@TGH我想@Teddy意味着我應該改變'POST'操作方法'返回JSON(真,JsonRequestBehavior.AllowGet)'然後處理JSON阿賈克斯'success'處理 – rexcfnghk

+0

@TGH裏面我覺得RedirectToAction實際上等於在客戶端重定向,返回一個視圖。 – Teddy

相關問題