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 に答える