你可以在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个参数,但它总是只返回发布的内容而不是我将其设置为服务器端!!!
答案 0 :(得分: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})`
注意:我只是猜测SearchModel
ViewModel上的属性。
答案 1 :(得分: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>