我对mvc非常陌生,至少可以说我有一个包含等对象的视图模型
public class vm_set_rol
{
public IEnumerable<SelectListItem> roles { get; set; }
public Rol_User rol { get; set; }
}
rol是一个类似于的对象
public class Rol_User
{
public int idUser { get; set; }
public int Role { get; set; }
public int GrantedBy { get; set; }
public bool canGrant { get; set; }
public DateTime ExpirationDate { get; set; }
}
所以我在视图上有一个表单,让用户从角色下拉列表中选择一个角色,并选择一个日期和一个复选框,比如:
<div class="ModalContainer">
@using (Ajax.BeginForm(new AjaxOptions
{
UpdateTargetId = "gestionRolContainer",
Url = "Permiso/Test",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
}
)
)
{
<fieldset>
<legend>@Res_String.RolLabel</legend>
<span>ROL:</span><br />@Html.DropDownListFor(m => m.rol, Model.roles, new {@id="AdmPermUserRolesDropDown" })
<br />
@Html.CheckBoxFor(m => m.rol.conceder ,Model.rol.conceder) <span>Delegate?</span>
<br />
<input type="submit" class="buttonClass" value="OK" />
</fieldset>
}
</div>
问题是,如果我在模型上创建一些其他属性,比如字符串或int,我只会得到null值,这些值会被发布回来,好的,
我有点理解为什么物品没有寄回,半身像有什么变通办法吗???或者把一个对象放在模式上是错误的,我应该在视图模型上声明属性,而不是对象???
您的下拉列表绑定错误。它应该绑定到一个标量属性以保存所选值:
@Html.DropDownListFor(
m => m.rol.Role,
Model.roles,
new { id = "AdmPermUserRolesDropDown" }
)
就Roles集合属性而言,它在控制器操作中始终为null,因为在提交表单时,此列表从不发送到服务器。只发送选定的值。因此,如果您需要再次重新显示此视图,则必须像在GET操作中一样,在HttpPost操作中填充Roles集合属性。
此外,您的复选框绑定到某个m => m.rol.conceder
属性,该属性在您显示的视图模型中不存在。我猜你的意思是使用canGrant
布尔属性。此外,您不需要将值作为第二个参数提供给CheckBoxFor辅助对象。它将从lambda表达式推断:
@Html.CheckBoxFor(m => m.rol.canGrant) <span>Delegate?</span>
最后但同样重要的是,由于您使用的是Ajax.BeginForm
,请确保您已在视图中引用了jquery.unobtrusive-ajax.js
脚本。