Asp.net mvc 4 使用ajax.MVC4发布复杂的视图模型时,只会得到null
我对mvc非常陌生,我有一个包含如下对象的viewmodelAsp.net mvc 4 使用ajax.MVC4发布复杂的视图模型时,只会得到null,asp.net-mvc-4,complextype,ajax.beginform,Asp.net Mvc 4,Complextype,Ajax.beginform,我对mvc非常陌生,我有一个包含如下对象的viewmodel public class vm_set_rol { public IEnumerable<SelectListItem> roles { get; set; } public Rol_User rol { get; set; } } 因此,我在视图上有一个表单,允许用户从角色下拉列表中选择1个角色,并选择日期和复选框,如: <div class="ModalContainer">
public class vm_set_rol
{
public IEnumerable<SelectListItem> roles { get; set; }
public Rol_User rol { get; set; }
}
因此,我在视图上有一个表单,允许用户从角色下拉列表中选择1个角色,并选择日期和复选框,如:
<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>
@使用(Ajax.BeginForm)(新的AjaxOptions
{
UpdateTargetId=“gestionRolContainer”,
Url=“Permiso/Test”,
InsertionMode=InsertionMode.Replace,
HttpMethod=“POST”,
}
)
)
{
@Res_String.RolLabel
ROL:
@Html.DropDownListFor(m=>m.ROL,Model.roles,new{@id=“AdmPermUserRolesDropDown”})
@(m=>m.rol.concender,Model.rol.concender)委托的检查框?
}
问题是我只得到空值,如果我在模型上创建了一些其他属性,比如字符串或int,那么这些属性会被发回ok
我有点理解为什么对象没有被发回,有什么解决办法吗???或者将对象放在模式上是错误的,我应该在viewmodel上声明属性而不是对象???您的下拉列表绑定错误。它应绑定到标量属性以保存选定值:
@Html.DropDownListFor(
m => m.rol.Role,
Model.roles,
new { id = "AdmPermUserRolesDropDown" }
)
就角色集合属性而言,它在控制器操作中始终为null,因为在提交表单时,此列表从未发送到服务器。仅发送选定的值。因此,如果需要再次重新显示此视图,则必须像在GET操作中一样,在HttpPost操作中填充Roles集合属性
此外,您的复选框被绑定到某个m=>m.rol.concender
属性,该属性在您显示的视图模型中不存在。我猜您的意思是使用canGrant
布尔属性。此外,您不需要将该值作为第二个参数提供给checkboxhelper。它将从lambda表达式中推断:
@Html.CheckBoxFor(m => m.rol.canGrant) <span>Delegate?</span>
@Html.CheckBoxFor(m=>m.rol.canGrant)委托?
最后但并非最不重要的一点是,由于您使用的是
Ajax.BeginForm
请确保您在视图中引用了jquery.unobtrusive Ajax.js
脚本。tks 4答案是,上面的所有代码都是一个已翻译的示例,canGrant在我的应用程序中是一个让步者,只是翻译错误,但在下拉列表中,tks
@Html.CheckBoxFor(m => m.rol.canGrant) <span>Delegate?</span>