0

你可以在一个使用 asp.net MVC4 的请求中两次使用相同的模型作为参数吗?

我有

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);
}

但是,无论我在上面的第一个方法中发布什么,当任何页面调用@Html.Action("SearchPartial")第二种方法时,我都会做一个,模型永远不会最终被发送到带有字符串“在搜索部分中更改”的客户端。_Layout,cshtml@HtmlAction

如果在同一个请求中调用两个动作,我就不能两次使用同一个模型。这真的很烦人......

我什至将第一种方法更改为仅使用 1 个参数,但它总是返回发布的内容,而不是我将其设置到服务器端的内容!!!

4

2 回答 2

0

当您使用@Html.Action("SearchPartial")它进行调用时,它会将其视为对名为 SearchPartial 的操作的全新请求,它不会隐式地继承父操作中的任何模型或 TempData。你必须自己做。

编辑:根据 Chris 在下面的评论中提到的内容,ChildAction 将尝试使用传递给父 Action 的参数绑定它的输入模型。

@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 回答
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; }
}

搜索结果.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 回答