0

我正在使用 asp.net mvc3 创建单选按钮列表。我需要从控制器中获取一个列表并将其显示在视图中。对于视图中的每个相应列表,我都有“是/否”单选按钮,如果单选按钮为“是”,则需要在末尾为列表中的每个项目生成一个字符串,则为 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 

在控制器中,我需要为此创建一个列表和相应的布尔值。我被困在这里,无法生成代码。无论如何我会解释伪代码

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>
}
4

1 回答 1

1

我建议您首先定义一个视图模型,该模型将代表您需要在特定视图中使用的信息。到目前为止,您已经提到了用户需要使用单选按钮设置模块是否处于活动状态的模块列表(我个人会使用 True/False 状态复选框,但这是您自己的决定):

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>
于 2012-10-03T11:45:22.793 回答