【发布时间】:2016-02-02 20:16:27
【问题描述】:
我只是在寻找一种更好的方法来执行以下操作:
我有一个 html 选择:
<form method="post" action="/Account/ChangeUserRole">
<select name="Val" onchange="this.form.submit();" class="span2">
@foreach (var r in ViewBag.UserRoles)
{
@if (u.UserRole.ID == r.ID)
{
<option selected="selected" value="@u.ID/@r.ID">@r.Name</option>
}
else
{
<option value="@u.ID/@r.ID">@r.Name</option> // <-- better way?
}
}
</select>
</form>
我将其发布为“userid/roleid”并在控制器端执行字符串。在 / 上拆分以拆分 u.ID 和 r.ID
我想知道是否可以发布它,以便我的控制器以这种方式获取它们:
[HttpPost]
public IActionResult ChangeUserRole(int UserID, int RoleID)
而不是这个巫术:
[HttpPost]
public IActionResult ChangeUserRole(string Val)
{
char[] splitChar = new char[] { '/' };
string[] s = Val.Split(splitChar);
int UserID = Convert.ToInt32(s[0]);
int RoleID = Convert.ToInt32(s[1]);
}
抱歉,帖子太长了。希望我的问题有意义。 我不是 html 助手的忠实粉丝。
旁注: 我正在使用 MVC 6、ASP 5 - RC1
感谢帮助
干杯!
【问题讨论】:
-
为什么不使用标签助手? This post 解释了如何使用 Select Tag helper 来呈现下拉菜单。
-
感谢您的回复。我喜欢使用标签助手的新方法,即: 不喜欢:@Html.LabelFor(m => p.Name, "Name:")
-
感觉对html设计师比较友好。而且它不会隐藏实现。
-
啊好吧..我明白了。我可以将其更改为接受包含这两个值的 ViewModel.. 天哪,我几乎每天都在这样做.. 完全错过了 :( 然后:“asp-items =”将它联系在一起。
标签: html asp.net-mvc asp.net-core-mvc