【问题标题】:I can not get values form RadioButtonFor List in asp.net mvc我无法在 asp.net mvc 中从 RadioButtonFor List 中获取值
【发布时间】:2017-08-20 09:30:41
【问题描述】:

我正在研究在移动视图和桌面视图上具有不同布局的视图的项目。所以我的解决方案是在 View 上创建 2 个表来为每个视图定义不同的元素。但它们将绑定来自同一模型的数据。请看下面我的代码:

查看

<table class="pc" style="border: 1px solid #eeecdc">
    <tbody>
      <tr>
        <td> @Html.RadioButtonFor(m => Model.SelectedOption, 1)
        </td>
        <td> @Html.RadioButtonFor(m => Model.SelectedOption, 2)
        </td>
     </tr>
   </tbody>
 </table>


 <table class="mb" style="border: 1px solid #eeecdc">
    <tbody>
      <tr>
        <td> @Html.RadioButtonFor(m => Model.SelectedOption, 1, new { @Name = "selectedOption_mb" })
        </td>
        <td> @Html.RadioButtonFor(m => Model.SelectedOption, 2, new { @Name = "selectedOption_mb" })
        </td>
     </tr>
   </tbody>
 </table>

型号

public class TestViewModel
{
   public TestViewModel(string pageName)
    {
    }
    /// <summary>
    /// Gets or sets the answer scales.
    /// </summary>
    /// <value>The answer scales.</value>
    public int SelectedOption { get; set; }
}

控制器

    public partial class TestController
    {

       [HttpPost]
       [ModelStateToTempData]
       public virtual ActionResult TestSave(TestViewModel model)
       {
         var value= model.SelectedOption;
       }
     }

结果

使用桌面视图:我可以获得价值。

使用移动视图:我无法获得价值(它始终为空)。

请帮助我从移动视图中获得价值。我不知道我做错了什么。

请看一下关于 PC 和移动视图的附件,这是我必须在一个视图上定义两个 html 的原因。

桌面

移动

非常感谢!

【问题讨论】:

  • new { @Name = "selectedOption_mb" } 更改了不再与模型属性名称匹配的 name 属性,因此无法由 DefaultModelBinder 设置。但是你为什么要这样做。您现在生成的 html 是所需数量的两倍,并通过网络发送,这会降低性能。
  • 我刚刚修改了我的问题,这就是为什么我必须在同一个视图上定义两个 html。
  • 不,您以错误的方式处理此问题。您需要根据设备仅包含其中一个或另一个的 html。我已经解释了为什么 is 不(并且永远不能)工作
  • 你的意思是我们应该使用响应式对吗?但请仔细检查我的设计,您会看到表格的结构将更改 将变为 并且问题文本将位于顶部而不是在桌面视图的中心。我尝试了 Jquery,但没有办法工作..
  • 不,我不是那个意思。您渲染两个表,但显示一个或另一个。首先,您需要使用相同的逻辑来仅渲染一个或另一个。

标签: asp.net-mvc-4 c#-4.0


【解决方案1】:

主要原因是你的Mobile View单选按钮名称不正确,不匹配,无法通过DefaultModelBinder设置

@Html.RadioButtonFor(m => Model.SelectedOption, 1, new { @Name = "selectedOption_mb" })

我完全理解您想从HttpGet 方法中获得价值。数据将同时显示在移动和桌面视图中。

在这种情况下,如果您想在一个 View 上定义具有不同元素的两个视图。您应该从Model 为移动视图定义更多属性。请参考下面的代码:

型号

public class TestViewModel
{
     public int? SelectedOption { get; set; }
     public int? SelectedOption_mb { get; set; }
}

查看

<table class="mb" style="border: 1px solid #eeecdc">
 <tbody>
  <tr>
    <td> @Html.RadioButtonFor(m => Model.SelectedOption_mb, 1)
    </td>
    <td> @Html.RadioButtonFor(m => Model.SelectedOption_mb, 2)
    </td>
 </tr>

控制器

var value= model.SelectedOption!=nul?
           model.SelectedOption:model.SelectedOption_mb!=null?
                                model.SelectedOption_mb:null;

希望对您有所帮助。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签