2013-04-09 78 views
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参数,但它总是回来与任何张贴,而不是我把它设置为服务器端!

+0

我没有看到在同一个请求中调用两个动作。您是否期望在搜索操作中定义的模型在页面上执行时获取SearchPartial操作中设置的词组? – 2013-04-09 19:28:41

回答

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> 

结果(与查询字符串: “这句=测试?”):

<!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> 
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})` 

注意:我只是猜测你的SearchModel ViewModel的属性。

+0

这不完全正确。是的,模型不是从父动作传递的,而是使用原始的请求参数。所以在这种情况下,由于父动作和子动作都接受'SearchModel',它应该可以在@ Html.Action(“SearchPartial”)下正常工作。 ChildAction不会修改父视图的模型。 – 2013-04-09 21:29:57

+0

啊,是的,我明白你的意思了。我没有注意到ChildAction中的那条线试图修改输入模型。 – 2013-04-09 22:40:09

相关问题