7

我有一个对 ViewModel 进行强类型化的视图。是否可以将视图中模型的所有数据传递回控制器操作?像这样的东西?

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

然后从 ResultsViewModel 收集数据作为另一个控制器中的参数

public ActionResult ExportCsv(ResultsViewModel resultsviewmodel)
{

}
4

4 回答 4

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>
于 2012-10-11T06:34:18.963 回答
2

设法制作了以下作品,

@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 帖子,但数据不在“表单数据”中,它在请求的 URL 中编码(但不是 http get)。

看起来 MVC 会自动将各个字段转换为单个模型。

URL 有长度限制,大模型可能会失败。

于 2016-12-09T20:52:15.300 回答
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);
}
于 2013-03-03T19:39:52.587 回答
0

我做了以下。这有点违背了HTTP POST我的观点。但是,嘿,它完成了工作。

我的阿贾克斯:

@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; }
}
于 2016-06-13T16:50:02.017 回答