3

我需要创建一个选择列表,保留状态,这不是传递给视图的模型的一部分。我想我应该使用 ViewBag 将 List 传递给 View ?关于实施的任何建议以及如何保留选择列表的状态(如何将所选值传递回操作并再次传递给视图(可能的方法)?

目前的行动:

public ActionResult Images(string x, string y)
{
//some code 

ContentPage cp = this.ContentPage;

return View(cp);
} 

//Post to action with same name:
[HttpPost]
public ActionResult Images(string someParameter)
 {

    ContentPage cp = this.ContentPage;

    return View(cp);
 }

目前的观点:

@model ContentPage
@{
ViewBag.Title = "Images";
CmsBaseController controller = (this.ViewContext.Controller as CmsBaseController);
}
@using (Html.BeginForm())
{ 
<div>

//This should go to List<SelectListItem> as I understand
<select name="perpage" id="perpage" onchange='submit();'>
           <option value="1">1</option>
           <option value="2">2</option>
           <option value="3">3</option>

</select>
</div>
}

谢谢!!!

4

1 回答 1

11

你看过这个 SO question吗?如果您想使用 ViewBag/ViewData 传入该列表,那么那里的答案似乎可以解决问题。

也就是说,为什么不直接创建一个快速视图模型并将其存储在那里?这确实是一个简单的方法。

我不知道您的 ContentPage 模型是什么,但您当然可以创建一个 ContentPageViewModel ,其中包含页面所需的任何内容(包括选择列表的值)。


例子:

例如,在视图模型上有一个属性来保存选择和一个属性来保存一些可能值的枚举,这很容易。像这样的东西:

public class MyViewModel
{
   ...

   public int SelectedId { get; set; }

   ...

   public IEnumerable<Choice> Choices { get; set; }
}

在我的示例中,Choice 是一个具有两个属性的类,一个包含一些标识符,另一个包含要显示的文本。像这样的东西:

public class Choice
{
   public int Id { get; set; }
   public string Text { get; set; }
}

然后你可能只需要一个DropDownListFor为你处理显示/选择工作的 a 。像这样的东西:

@model MyViewModel

@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.Choices, "Id", "Text"), "Choose... ")

回到您的控制器的操作中,视图模型SelectedId将使用下拉列表中选择的选择视图的相应 ID 填充。

于 2011-08-26T18:29:18.193 回答