0

asp.net MVC4 で 1 回のリクエストで同じモデルを 2 回引数として使用できますか?

私は持っている

public ActionResult Search(SearchModel model) 
{
    SearchResults resultsModel = new SearchResults();

    resultsModel.Results = new List<string>();
    resultsModel.Results.Add("posted value : " + model.Phrase);

    return View("SearchResults", resultsModel);
}

[ChildActionOnly]
public ActionResult SearchPartial(SearchModel model) 
{
    model.Phrase = "changed in search partial";

    return PartialView("_SearchPartial", model);
}

ただし、ページが2番目のメソッドで呼び出したときに、上記の最初のメソッドに何を投稿しても@Html.Action("SearchPartial")、モデルが「部分検索で変更された」という文字列でクライアントに送信されることはありません。_Layout,cshtml@HtmlAction

同じリクエストで2つのアクションが呼び出された場合、同じモデルを2回使用できないようです。これは本当に迷惑です....

最初のメソッドを1つのパラメーターのみを使用するように変更しましたが、サーバー側に設定したものではなく、投稿されたものが常に返されます!!!

4

2 に答える 2

0

これはうまくいくはずです。私はちょうど次のことをテストしました:

コントローラ:

public ActionResult Search(SearchModel model) 
{
    SearchResults resultsModel = new SearchResults();

    resultsModel.Results = new List<string>();
    resultsModel.Results.Add("posted value : " + model.Phrase);

    return View("SearchResults", resultsModel);
}

[ChildActionOnly]
public ActionResult SearchPartial(SearchModel model) 
{
    model.Phrase = "changed in search partial";

    return PartialView("_SearchPartial", model);
}

モデル:

public class SearchModel
{
    public string Phrase { get; set; }
}

public class SearchResults
{
    public List<string> Results { get; set; }
}

SearchResults.cshtml:

@model SearchResults

@foreach (var item in Model.Results) {
    <div>@item</div>
}

_SearchPartial.cshtml:

@model SearchModel
<strong>Search Phrase:</strong> @Model.Phrase

_Layout.cshtml:

<!DOCTYPE html>
<html lang="en">
    <body>
        <div>
            <h2>Partial Contents</h2>
            @Html.Action("SearchPartial", "Home")
        </div>
        <div>
            <h2>Body Contents</h2>
            @RenderBody()
        </div>
    </body>
</html>

結果(クエリ文字列: "?phrase=Test"):

<!DOCTYPE html>
<html lang="en">
    <body>
        <div>
            <h2>Partial Contents</h2>
            <strong>Search Phrase:</strong> changed in search partial
        </div>
        <div>
            <h2>Body Contents</h2>
            <div>posted value : Test</div>
        </div>
    </body>
</html>
于 2013-04-09T21:37:44.093 に答える
0

@Html.Action("SearchPartial")SearchPartial と呼ばれるアクションへの新しいリクエストとして処理する呼び出しを行う場合、親アクションからモデルや TempData を暗黙的に引き継ぐことはありません。これは自分で行う必要があります。

編集:クリスが以下のコメントで言及したことから、ChildAction は、親アクションに渡されたパラメーターを使用して入力モデルをバインドしようとします。

@Html.Action("SearchPartial", new {model = Model})

ただし、過去にこれを行ったときはいつでも、完全なオブジェクトではなくプリミティブデータを渡すため、代わりにこれを行う必要がある場合があります。

@Html.Action("SearchPartial", new {phrase = Model.Phrase, page = Model.Page, perPage = Model.PerPage})`

注: SearchModelViewModel のプロパティを推測しているだけです。

于 2013-04-09T21:15:31.103 に答える