我正在使用asp.net mvc3来创建radiobuttons列表。我需要从控制器获取 列表 并在视图中显示它。对于视图中的每个相应列表,我有YES / NO单选按钮,如果radiobutton为yes,则需要在结尾处为列表中的每个项目生成一个字符串,然后是1,否则为0.
例如,如果我在列表中有10个项目,那么我需要在视图中显示它们(项目的默认值为false)然后在提交时生成一个字符串,其中字符串中的每个字符对应于bool值列表中的每个项目。
任何人都可以告诉我如何在mvc3中执行此操作? 感谢您的帮助。
更新
以下是我正在尝试的代码:
我的班级有两个属性:
public List<Module> lstModules { get; set; } // gives the list of items
public List<bool> IsModuleActivelst { get; set; } //gives the bool values
在控制器中,我需要为此创建一个列表和相应的bool值。我被困在这里,无法生成代码。无论如何我会解释伪代码
public class MMController : Controller
{
[HttpGet]
public ActionResult Clients()
{
//I need to generate the list - using lstModules prop
// Assign the list with the predefined values and if not just give the default values- using IsModuleActivelst prop
}
}
我在这里创建视图:
@foreach (var i in Model.lstModules)
{
<div class="formlabel">
<div align="right" class="label">
@Html.LabelFor(model => model.lstModules):</div>
</div>
<div class="formelement">
<label for="radioYes" class="visible-enable" style="cursor:pointer;position:relative;">
@Html.RadioButtonFor(model => model.IsModuleActivelst, "True", new { @id = "radioYes", @style = "display:none;" })
<span>Yes</span></label>
<label for="radioNo" class="visible-disable" style="cursor:pointer;position:relative;">
@Html.RadioButtonFor(model => model.IsModuleActivelst, "False", new { @id = "radioNo", @style = "display:none;" })
<span>No</span></label>
</div>
}
答案 0 :(得分:1)
我建议您首先定义一个视图模型,该模型将表示您需要在特定视图中使用的信息。到目前为止,您已经提到了一个模块列表,用户需要使用单选按钮来设置模块是否处于活动状态(我个人会使用复选框来表示真/假状态,但这是您自己的决定):
public class ModuleViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
public class MyViewModel
{
public IEnumerable<ModuleViewModel> Modules { get; set; }
}
然后你可以定义一个控制器来填充视图模型,渲染表单并有另一个动作来处理表单提交:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
// TODO: this information could come from a database or something
Modules = new[]
{
new ModuleViewModel { Id = 1, Name = "module 1", IsActive = true },
new ModuleViewModel { Id = 2, Name = "module 2", IsActive = true },
new ModuleViewModel { Id = 3, Name = "module 3", IsActive = false },
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content(
string.Format(
"Thank you for selecting the following values: {0}",
string.Join(" ", model.Modules.Select(x => string.Format("model id: {0}, active: {1}", x.Id, x.IsActive)))
)
);
}
}
最后一部分是定义视图(~/Views/Home/Index.cshtml
):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Modules)
<button type="submit">OK</button>
}
最后,将自动为Modules集合的每个元素呈现相应的编辑器模板 - 注意模板的名称和位置很重要 - ~/Views/Shared/EditorTemplates/ModuleViewModel.cshtml
:
@model ModuleViewModel
<div>
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.Name)
<h2>@Html.DisplayFor(x => x.Name)</h2>
@Html.Label("IsActiveTrue", "Yes")
@Html.RadioButtonFor(x => x.IsActive, "True", new { id = Html.ViewData.TemplateInfo.GetFullHtmlFieldId("IsActiveTrue") })
<br/>
@Html.Label("IsActiveFalse", "No")
@Html.RadioButtonFor(x => x.IsActive, "False", new { id = Html.ViewData.TemplateInfo.GetFullHtmlFieldId("IsActiveFalse") })
</div>