C# 如何传递带有可枚举对象的模型以供查看?
我是ASP.MVC4新手,在将对象从视图传递到控制器时遇到问题: 让我从一开始就解释我的问题: 所使用的我的类是例如:UserAndRolesModelC# 如何传递带有可枚举对象的模型以供查看?,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我是ASP.MVC4新手,在将对象从视图传递到控制器时遇到问题: 让我从一开始就解释我的问题: 所使用的我的类是例如:UserAndRolesModel public class UserAndRolesModel { public user User { get; set; } public IEnumerable<UserAndRoles> AsignedRoles { get; set; } } 我的控制器操作很简单,它将用户分配给UserWithRoles.
public class UserAndRolesModel
{
public user User { get; set; }
public IEnumerable<UserAndRoles> AsignedRoles { get; set; }
}
我的控制器操作很简单,它将用户分配给UserWithRoles.user,并使用UserAndRoles对象创建模板
public ActionResult Edit(int userid=0)
{
//object which will be passed to View
UserAndRolesModel UserWithRoles = new UserAndRolesModel();
//user
UserWithRoles.User = repoUsers.Users.FirstOrDefault(x => x.user_id == userid);
//roles
IList<UserAndRoles> tempList = new List<UserAndRoles>();
UserAndRoles temp1 = new UserAndRoles();
temp1.RoleName="Admin";
temp1.IsAssigned=true;
UserAndRoles temp2 = new UserAndRoles();
temp2.RoleName="User";
temp2.IsAssigned=false;
tempList.Add(temp1);
tempList.Add(temp2);
//assign tempList to model
UserWithRoles.AsignedRoles = tempList;
return View(UserWithRoles);
)
我能够正确显示以上视图:
@model Models.UserAndRolesModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-field">
@Html.EditorFor(model => model.User.user_id)
@Html.ValidationMessageFor(model => model.User.user_id)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.User.user_name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.User.user_name)
@Html.ValidationMessageFor(model => model.User.user_name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.User.user_active)
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.User.user_active)
@Html.ValidationMessageFor(model => model.User.user_active)
</div>
<br /> ROLES below is piece of code which makes me cry<br />
@foreach (var item in Model.AsignedRoles)
{
<div class="editor-field">
<div class="editor-field">
@Html.LabelFor(model => item.RoleName)
@Html.CheckBoxFor(model => item.IsAssigned)
</div>
</div>
}
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
在视图中,我尝试使用其他循环,例如:
@for (int i = 0; i < Model.AsignedRoles.Count(); i++)
{
<div class="editor-field">
@Html.LabelFor(model => item[i].IsAssigned)
@Html.CheckBoxFor(model => item[i].IsAssigned)
</div>
}
@for(int i=0;iitem[i].IsAssigned)
@Html.CheckBoxFor(model=>item[i].IsAssigned)
}
但上面也没有通过IEnumerable。
有人能帮我解决这个问题吗?如何传回包含IEnumerable的控制器UserAndrolesModel?
我将非常感激。提前谢谢你的帮助 对于循环,您确实需要
,但是您尝试的循环引用了项[i]
,但是项[i]
不再存在。试试这个,请注意,我还为RoleName
添加了一个HiddenFor
,否则不会传回:
@for (int i = 0; i < Model.AsignedRoles.Count(); i++)
{
<div class="editor-field">
@Html.LabelFor(model => model.AssignedRoles[i].IsAssigned)
@Html.CheckBoxFor(model => model.AssignedRoles[i].IsAssigned)
@Html.HiddenFor(model => model.AssignedRoles[i].RoleName)
</div>
}
@for(int i=0;imodel.AssignedRoles[i].IsAssigned)
@Html.CheckBoxFor(model=>model.AssignedRoles[i].IsAssigned)
@Html.HiddenFor(model=>model.AssignedRoles[i].RoleName)
}
您能否使用Fiddler查看实际被发回的内容?您是否尝试使用IList
而不是IEnumerable
?还有,因为我不能忍受不评论它AsignedRoles
缺少s,并且UserWithRoles
不遵循小写变量名称的约定。^不要管IList,使用for循环是您需要的。您还应该检查html源代码,查看它是否正在生成类似于[0].IsAssigned[…][1].IsAssigned
的内容。绑定列表的任务很好,这个问题在网站上也被问了无数次。感谢AlexanderBrevig,问题出在IEnumerable和IList中。我不得不把它改成IList,现在它工作得很好。谢谢Mattytomo的回答!问题出在IEnumerable和IList中,但您的代码帮助我弄清楚了。谢谢你们的帮助!!!!
[HttpPost]
public ActionResult Edit(UserAndRolesModel UserWithRoles)
{
if (ModelState.IsValid)
{
if (UserWithRoles.AsignedRoles==null)
Console.WriteLine("I am still crying");
else
Console.WriteLine("Got it!");
}
return View(UserWithRoles);
}
@for (int i = 0; i < Model.AsignedRoles.Count(); i++)
{
<div class="editor-field">
@Html.LabelFor(model => item[i].IsAssigned)
@Html.CheckBoxFor(model => item[i].IsAssigned)
</div>
}
@for (int i = 0; i < Model.AsignedRoles.Count(); i++)
{
<div class="editor-field">
@Html.LabelFor(model => model.AssignedRoles[i].IsAssigned)
@Html.CheckBoxFor(model => model.AssignedRoles[i].IsAssigned)
@Html.HiddenFor(model => model.AssignedRoles[i].RoleName)
</div>
}