ASP.NET C#MVC 4 Code First应用程序 - 在Visual Studio 2012 Express中,SQL Server 2012 Express。
我有一个地方对象。我想在列表中输出所有地方的名称 - 每个地方旁边都有一个复选框。
然后我想登录用户选择他们喜欢的地方 - 并保存。然后他们可以登录并再次查看它们,并选中相应的复选框。
最好的方法是什么?我是MVC的新手,并不确定这里的最佳实践。
感谢
更新
下面的CheckboxListFor帮助程序工作得很好,但是如何处理用户选择并不明显(它只返回一个ID列表)。
我创建了以下内容来获取ID列表 - 将其转换为对象列表,并将其添加到视图模型中的SelecteCities列表中。这将选择用户在发布页面之前选择的所有复选框:
public ActionResult Examples(PostedCities postedCities)
{
// ViewModel
CitiesViewModel cvm = new CitiesViewModel();
// Create list of cities
List<City> cities = new List<City>{
new City { Id = 1, Name = "London"},
new City { Id = 2, Name = "Saigon"},
new City { Id = 3, Name = "New York"}
};
// Assign list of cities to ViewModel
cvm.AvailableCities = cities;
// If posted cities present, user posted something (else probably first call)
if (postedCities.CityIDs != null)
{
// temporary city object
City cty = new City();
// List of selected cities
List<City> selCities = new List<City>();
// Go through each postedCity ID
foreach (string s in postedCities.CityIDs)
{
// Get ID of postedCity
int IdSel = Convert.ToInt32(s);
// Lookup city Id in cities
cty = cities.Single(c => c.Id == IdSel);
// Add selected city to cty object
selCities.Add(cty);
}
// Fill cvm.SelectedCities with selCities
cvm.SelectedCities = selCities;
}
return View(cvm);
}
这是有效的 - 这是一个好方法还是我过于复杂?或者做得很糟糕?
答案 0 :(得分:5)
您可以保存自己的工作并使用现有的MvcCheckBoxList库。
使用以下命令使用nuget安装它:
PM> Install-Package MvcCheckBoxList
这是他们的主页:MvcCheckBoxList
以下是文档:MvcCheckBoxList/Documentation
其他解决方案需要一些难看的编码。
<强>更新强>
正如 Klas Mellbourn 所建议的那样(我很抱歉将其视为理所当然),带有列表的视图模型将是此类sceneria的最佳实践。我提供的文档链接包含了这些示例,供您更轻松地理解。
答案 1 :(得分:0)
我想说MVC最佳实践是让一个视图模型镜像你想要显示的字段。它将包含一个带有项目的List,每个项目包含一个地名字符串和一个bool用于复选框。
在显示页面的控制器方法中,您将根据使用Entity Framework从数据库填充的places对象构建视图模型。
用户可能会使用某个命令保存状态,也许是提交按钮。这将调用第二个控制器方法,该方法读取视图模型并使用Entity Framework保留内容。