我有一个强烈键入ViewModel的视图。是否可以从视图中的模型传递所有数据,返回到控制器操作?像这样的东西?
@Ajax.ActionLink("(Export to Excel)", "ExportCsv", "SurveyResponse", new {
ResultsViewModel = Model }, new AjaxOptions {HttpMethod = "POST"})
然后从ResultsViewModel收集数据作为另一个控制器中的参数
public ActionResult ExportCsv(ResultsViewModel resultsviewmodel)
{
}
答案 0 :(得分: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>
答案 1 :(得分: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帖子,但不在&#34;中的数据形成数据&#34;,它在请求的URL中编码(但不是http get)。
看起来MVC会自动将各个字段转换为单个模型。
网址有长度限制,大型模型可能会失败。
答案 2 :(得分: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);
}
答案 3 :(得分: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)
{}
My Binding Model:
public class RemoveSubjectFromCategoryModel
{
[Required]
public int SubjectId { get; set; }
[Required]
public int CategoryId { get; set; }
}