3

ビュー(Razor Engine)のモデル(またはその一部、つまりその後の検索クエリ)データをコントローラーに渡す方法があるかどうかを知る必要があります。

私がしなければならないことをより良い方法で説明するために、それは興味のあるコードです:

見る:

@model IEnumerable<MvcMovie.Models.Movie>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

...
@foreach (var item in Model) { ...}
...

@Html.ActionLink("Search", "SearchIndex")
@Html.ActionLink("Create Document", "createDoc"/*, new { id = Model.ToList() }*/)

渡したい

@model IEnumerable<MvcMovie.Models.Movie>

最初の行 (= foreach 命令で使用されるモデル) で Controller "createDoc" に、ビューに動的にバインドされたレポート ドキュメントを作成します。

私はすべてを試しました: ViewData (VIEW: ViewData["data"]=Model , CONTROLLER List movies= ViewData["data"]) を使用しようとしました。 ActionLink (ご覧のとおり: new{ id= Model.toList() }) ですが、何も機能しませんでした。

私がやりたいことをすることさえ可能ですか?

誰でも私を助けることができますか?

4

2 に答える 2

2

モデルは次のようにすべきではありません。たとえば、プロパティの1つとして持つIEnumerable<MvcMovie.Models.Movie> クラスである必要があります。SearchMovieModelIEnumerable<MvcMovie.Models.Movie> Movies

検索モデルが必要な場合は、次のようなものが適切です。

public class SearchMovieModel{
    public IEnumerable<MvcMovie.Models.Movie> Movies {get;set;}
    public string SearchString {get;set;}
}

ビューとコントローラでこのモデルとそのプロパティを参照します。

これを解析するためのメソッドをコントローラーに追加する必要があると思います。

ビューへの最初の呼び出しでは、モデルは存在しません。コントローラで作成する必要があります。

public ActionResult Search(){
    var model = new SearchMovieModel();
    //you also need to instantiate the null objects unless you do that in the model's constructor
    model.Movies = new List<Movie>();
    return View(model);
}

POSTデータをモデルに「再変換」するには、モデルとメソッドを指定する必要があります。

[HttpPost]
public ActionResult Search(SearchMovieModel model){
    if (ModelState.IsValid){
        //populate your IEnumerable<Movie> here.
        return View(model);
    }
    // the complex collection will not be parsed back into the model.  You will need to repopulate it.
    model.Movies = new List<Movie>();
    return View(model);
}
于 2012-06-01T15:54:34.680 に答える
1

私はあなたが何を望んでいるのか知っていると思います...しかし、このコードは

@Html.ActionLink("Create Document", "createDoc", new { id = Model.ToList() })

あなたのhtmlは..

<a href="/test/createDoc?id=System.Collections.Generic.List%601%5BMvcMovie.Models.Movie%5D">Create Document</a>

それは、データではなく型をレンダリングするためです

ソリューション

  1. フィルターモデルを定義して検索を再度実行します( jeremy-holovacsと私の推奨事項)なぜサーバーに同じデータを再度要求するのですか? 誰かがそのリンクを共有した場合...アプリが生成する偽のデータを挿入することさえ結果がどうなるか想像できるからです

  2. たとえば、データをjsonにシリアル化して、コントローラーに転送します

于 2012-06-01T19:19:52.010 に答える