【问题标题】:MVC view and viewmodel radiobutton groupMVC 视图和视图模型单选按钮组
【发布时间】:2015-08-10 12:18:38
【问题描述】:

在 MVC5+ 视图中定义一组单选按钮最优雅的方法是什么?

假设我有一个这样的视图模型

public class ViewModel
{
    public bool Value1 {get;set;}
    public bool Value2 {get;set;}
}

我想在 MVC5+ 视图上呈现它,所以它是 Value1 还是 Value2?在 WebForms 中,我会将它们放在一行中并为它们定义一个通用的 GroupName 属性,而在纯 HTML 中,我会创建一对输入 type=radio 并给它们一个通用的“名称”属性。使用属性/数据注释在 MVC 中执行此操作的最佳方法是什么?

谢谢

【问题讨论】:

  • 单选按钮用于从多个值中选择一个值。您有 2 个属性而不是一个。不清楚你想做什么,但你需要一个(比如说)string Value 属性和@Html.RadioButtonFor(m => m.Value, "Value1") 和另一个"Value2"
  • 我想在 Value1 和 Value2 之间进行选择。如果选中 Value1 单选,则未选中 Value2 单选。我可能没有正确设置视图模型。欢迎提出任何建议。
  • 您需要按照我的第一条评论进行操作 - 一个属性(bool IsValuestringenum)然后为该属性创建 2 个单选按钮

标签: asp.net-mvc model-view-controller attributes viewmodel data-annotations


【解决方案1】:

最好在 viewmodel 类中引用一个类,例如“Employee”。然后将视图模型分配给视图,您可以在其中引用视图模型中的任何类。

下面的示例将为您提供两个单选按钮,它们将为您的问题的“性别”属性提供男性或女性。所以如果你的问题是“你的性别是什么?”然后用户选择男性或女性。然后在控制器中,您可以询问用户选择了哪个值。

你的 ViewModel 类应该是这样的:

public class ViewModel
{
    public Employee Employee {get;set;}
}

你的 Employee 类应该是这样的:

public class Employee
{
    public string Gender {get; set;}
}

你的控制器是这样的:

using GenderApplication.Models;
public ActionResult Create()
    {
        return View();
    }

[HttpPost]
public ActionResult Create(ViewModel viewModel)
    {
        //whatever you wanted to do with viewModel.Employee.Gender
        return RedirectToAction("Index");
    }

你的观点是:

@model GenderApplication.Models.ViewModel

@using (Html.BeginForm())
{
@Html.RadioButtonFor(model => model.Employee.Gender, "Male")
<text>True</text>
<br />
@Html.RadioButtonFor(model => model..Employee.Gender, "Female")
<text>False</text>  
<br />
<input type="submit" value="Submit" formaction="@Url.Action("Create")" />

【讨论】:

  • 拥有额外的课程是没有意义的(完全没有必要,当然也不是最好的)。这根本不起作用 - "Male""Female" 的值如何绑定到 typeof bool 的属性(并且只能接受 truefalse 的值。
  • 粗鲁..最初我在里面有一个布尔值是真还是假,但是把它改成了字符串,忘了替换布尔值。额外的课程不太正确,我会使用一个员工课程和一个名为性别的变量,但我在工作期间急于回答,并认为 MVC 的新手会受益于看到课程中的课程是如何工作的。很抱歉试图帮助的不仅仅是一个班轮..
  • 指出你的错误很粗鲁?
  • 没问题,下次我会给它应得的反对票并继续前进。
【解决方案2】:

只是想在这里添加一些东西

如果您正在使用,请将[BindProperty] 属性添加到属性Gender

<input type = radio" name = "ViewModel.Gender" value="Male"> 
<input type = radio" name = "ViewModel.Gender" value="Female"> 

在您的cshtml 中像这样使其工作并使用为Gender 选择的值填充输入模型

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 2013-12-04
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多