【发布时间】: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