我有以下情况:
我的索引页面,使用其中包含部分视图的布局。部分视图包含搜索文本框。
对于特定情况,我需要使用我的viewdata []为索引页设置搜索框的文本。
是不是在某种程度上poosiblein mvc3,asp.net 2010在视图页面的局部视图中设置文本框的值?
答案 0 :(得分:1)
您可以将部分强类型设置为某个视图模型:
@model SearchViewModel
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.Keywords)
@Html.EditorFor(x => x.Keywords)
<button type="submit">OK</button>
}
然后在插入部分时,您可以传递此视图模型:
@Html.Partial("_Search", new SearchViewModel { Keywords = "some initial value" })
或者甚至更好的主视图的视图模型已经具有SearchViewModel
类型的属性,您将能够像这样调用部分:
@Html.Partial("_Search", Model.Search)
现在很明显,在您的Index操作中,您不再需要使用任何ViewData,但您可以直接使用强类型视图模型:
public ActionResult Index()
{
var model = new MyViewModel
{
Search = new SearchViewModel
{
Keywords = "some initial value"
}
};
return View(model);
}
答案 1 :(得分:1)
您总是可以强制键入局部视图(即使模型只是一个字符串)并传递您需要的值。
public class MyModel
{
public int ValueForView {get;set;}
public string TextBoxValue {get;set;}
}
-Index.cshtml
@model MyModel
@{ Html.RenderPartial("PartialView", Model.TextBoxValue); }
-PartialView.cshtml
@model string
@Html.TextBoxFor(m => Model)
答案 2 :(得分:0)
据我了解您的问题,部分视图位于您的布局中,您需要将数据输入其中。
在这种情况下,布局会在最后处理,但会将数据传递给它,您的选项会受到一些限制。您可以使用ActinFilter或ViewData。 ViewData是最简单的,也是最混乱的,所以我不推荐它。
ActionFilters会起作用,但你可以通过简单地调用你的布局来处理你的部分:
@Html.RenderAction("PartialViewAction", "PartialViewController")
除非我遗漏了一些东西,否则我不相信其他答案会解决这个问题,因为这是一个不同的问题。