2012-10-10 67 views
6

我有一個強制鍵入ViewModel的視圖。是否有可能將視圖中模型的所有數據傳遞迴控制器操作?像這樣?Ajax.ActionLink從視圖發佈整個模型?

@Ajax.ActionLink("(Export to Excel)", "ExportCsv", "SurveyResponse", new { 
ResultsViewModel = Model }, new AjaxOptions {HttpMethod = "POST"}) 

,然後收集從ResultsViewModel作爲參數數據在另一個控制器

public ActionResult ExportCsv(ResultsViewModel resultsviewmodel) 
{ 

} 
+0

不,你不能在@ Ajax.ActionLink中傳遞ViewModel作爲參數,如果你想在POST中使用這些參數,那麼你必須使用Html.BeginForm或Ajax.BeginForm提交表單。或者仍然想要使用Ajax.Action鏈接傳遞值,然後傳遞ViewModel的每個值。 – Shivkumar

回答

4

不,你不能傳遞這樣整個視圖模型的動作鏈接。你可以通過這個模型只有id,然後檢索使用此id實際的模型無論你最初檢索它:

@Ajax.ActionLink(
    "(Export to Excel)", 
    "ExportCsv", 
    "SurveyResponse", 
    new { id = Model.Id }, 
    new AjaxOptions { HttpMethod = "POST" } 
) 

作爲替代方案,你可以序列化模型作爲字面一個JavaScript,然後將其作爲一個與AJAX請求JSON數據:

@Html.ActionLink(
    "(Export to Excel)", 
    "ExportCsv", 
    "SurveyResponse", 
    null, 
    new { @class = "exportCsv" } 
) 
<script type="text/javascript"> 
    $('.exportCsv').click(function() { 
     var model = @Html.Raw(Json.Encode(Model)); 
     $.ajax({ 
      url: this.href, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify(model), 
      success: function(result) { 

      } 
     }); 
     return false; 
    }); 
</script> 
0

嘗試發送你的模型的ID控制器,並得到JSON結果:

@Ajax.ActionLink("(Export to Excel)", "ExportCsv", "SurveyResponse", new { 
id = Model.Id }, new AjaxOptions {HttpMethod = "POST"}) 

而在控制器中,您將擁有:

[HttpGet] 
public ActionResult ExportCsv(int id) 
{ 
//Here get the whole model from your repository for example: 
var model=GetModelByModelId(id); 
//And do everything you want with your model. 
return Json(model,JsonRequestBehavior.AllowGet); 
} 
+0

爲什麼你在視圖中有'[HttpGet]',然後'HttpMethod ='POST''? – Zapnologica

0

我做了以下操作。在我的觀點中,它有點違背HTTP POST的觀點。但是,嘿,它完成了工作。

我的Ajax:

@Ajax.ActionLink("Delete", "RemoveSubjectFromCategory","Categories", new { SubjectId = item.Id, CategoryId = Model.Id }, new AjaxOptions {HttpMethod = "GET"}) 

我的控制器:

[HttpGet] 
public async Task<ActionResult> RemoveSubjectFromCategory(RemoveSubjectFromCategoryModel model) 
{} 

我綁定模型:

public class RemoveSubjectFromCategoryModel 
{ 
    [Required] 
    public int SubjectId { get; set; } 

    [Required] 
    public int CategoryId { get; set; } 
} 
1

管理之下進行工作,

@Ajax.ActionLink("(Export to Excel)", "ExportCsv", "SurveyResponse", 
new { Model.F1, Model.F2, Model.OtherFields }, new AjaxOptions {HttpMethod = "POST"}) 

控制器

[HttpPost] 
public ActionResult ExportCsv(ResultsViewModel resultsviewmodel) 
{ 

} 

這是一個HTTP POST,但在「表單數據」,在沒有數據時,它在請求的URL的已編碼(而不是HTTP GET)。

看起來像MVC自動將單個字段轉換爲單個模型。

URL有長度限制,大型號可能會失敗。