c# - 我无法从视图中获取模型
问题描述
有人可以帮助我吗?
我有一个模型:
public class EditUserVM
{
public string Role {get;set;}
public IEnumerable<SelectListItem> AllRoles { get; set; }
}
我有一个控制器:
public class AdminController : Controller
{
// GET: Admin/Admin/EditUser/id
[HttpGet]
public ActionResult EditUser(string id)
{
ApplicationUser user = UserManager.FindById(id);
EditUserVM model;
//model initialization
return View(model);
}
// POST: Admin/Admin/EditUser
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditUser(EditUserVM model)
{
if (!ModelState.IsValid)
{
return View(model);
}
//code
return View(model);
}
}
我有一个观点:
@model EditUserVM
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.Role, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Role", Model.AllRoles, new { @class= "btn btn-light"})
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</div>
}
但是当我点击保存按钮时,在后控制器操作中我不明白model.AllRoles
我的意思是model.AllRoles == null
. 我怎样才能得到这些值?
解决方案
当用户提交表单(然后生成回调到 EditUser 方法的 [HttpPost] 变体)时,浏览器只提交下拉列表的选定值,而不是可能选择的整个列表。在服务器端,创建视图模型的一个实例,并用浏览器发送的内容填充。由于浏览器尚未发送所有可能选项的列表,因此该字段在您的 ViewModel 中为空。
这种行为是有道理的。您对可能性列表不感兴趣(事实上,您已经知道该列表,因为您在 [HttpGet] 方法中将它发送到浏览器)。您只对用户选择的实际值感兴趣。如果 ModelState 无效,并且您使用该 ViewModel 生成新 View,则需要再次重新填充 AllRoles。
推荐阅读
- maven - 何时在构建工具的 Sonarqube 插件上使用 sonar-scanner?
- swift - 检测 iMessage 扩展中的用户交互
- matlab - 具有 unit16 图像与 unit8 图像的局部二元特征
- python - 通过 zip 文件中的 pip 安装 comtypes-1.1.7 后出错
- python - 用python处理excel中的数据
- apache-spark - 未使用的火花工人
- google-cloud-platform - 如何将文件直接从谷歌驱动器移动到谷歌云平台
- android - 从当前项目中的另一个模块启动 MainActivity
- image - xamarin 表单列表视图图像绑定
- java - 自动委托实现方法