这个问题以前曾被问过类似的问题,但我不知道如何将这些答案应用于我的具体问题:
ViewModel
public string RouterElect { get; set; }视图
if ((!string.IsNullOrWhiteSpace(Model.JudgeCode)) && (Model.userIsAuthorized))
{
<div id="ChangeRouterSection" class="live-tile" data-mode="carousel" data-direction="vertical" data-delay="7000">
@{Html.RenderPartial("_ChangeCurrentRouter");}
</div>
}
else
{
<div id="ChangeRouterSection" class="live-tile" data-mode="carousel" data-direction="vertical" data-delay="7000">
<div class="tile">
User not authorized. Access denied.
</div>
</div>
}局部视图
@model JudicialPortal.ViewModels.PortalIndexView
<div class="tile">
Change Current Router
@Html.DropDownListFor(x => x.RouterElect, Model.JPortalChamberUsersAsItems, new { @id = "changeCurrentRouterInput", @class = "m-wrap", @onchange = "" })
<button type="button" class="m-btn green-stripe" onclick="changeCurrentRouter();"
style="color: #444; text-decoration: none;">
Okay</button>
</div>当页面加载时,它将无问题地呈现,如下所示:
从呈现页中平铺
但是,当选择下拉列表中的项,然后单击OKay按钮时,会发生以下错误:
没有具有'RouterElect‘键的'IEnumerable’类型的IEnumerable项。
对于代码行:
@Html.DropDownListFor(x => x.RouterElect, Model.JPortalChamberUsersAsItems, new { @id = "changeCurrentRouterInput", @class = "m-wrap", @onchange = "" })任何想法都很感激。
更新:有人询问JPortalChamberUsersAsItems后端代码:
JPortalChamberUsersAsItems = new List<SelectListItem>();
if (HttpContext.Current.Session["JPortalChamberUsersAsItems"] != null)
{
JPortalChamberUsersAsItems = HttpContext.Current.Session["JPortalChamberUsersAsItems"] as List<SelectListItem>;
}
else
{
for (int i = 0; i < tempArrayOfUsers.Count; i++)
{
JPortalChamberUsersAsItems.Add(new SelectListItem { Text = tempArrayOfUsers[i], Value = tempArrayOfUsers[i] });
}
foreach (SelectListItem routerUser in JPortalChamberUsersAsItems)
{
if (!string.IsNullOrWhiteSpace(routerUser.Text))
{
if (routerUser.Text.ToUpper() != "PLEASE SELECT A ROUTER")
{
routerUser.Text = ReplaceUsernameWithFullName(routerUser.Text);
}
}
}
JPortalChamberUsersAsItems.Insert(0, (new SelectListItem { Text = "Please select a router", Value = "Please select a router" })); //2014-12-15 This code adds the "default" first option - DO NOT REMOVE
HttpContext.Current.Session.Add("JPortalChamberUsersAsItems", JPortalChamberUsersAsItems);
}另一个问题是关于OKay的行动。它调用changeCurrentRouter脚本,该脚本执行ChangeCurrrentRouter操作:
public ActionResult ChangeCurrentRouter(string changeCurrentRouterInput, string JudgeCode, bool userIsAuthorized, PortalIndexView viewmodel)
{
bool databaseCallOk = false;
string errorString = "";
viewmodel.userIsAuthorized = userIsAuthorized;
viewmodel.JudgeCode = JudgeCode;
if (!string.IsNullOrWhiteSpace(changeCurrentRouterInput))
{
if (changeCurrentRouterInput.ToUpper() != "PLEASE SELECT A ROUTER")
{
//database call
databaseCallOk = viewmodel.changeRouterUser(changeCurrentRouterInput, JudgeCode);
}
}
if (databaseCallOk == false)
{
if (string.IsNullOrWhiteSpace(viewmodel.errorCatcher))
{
errorString = "An error occurred trying to change the router for your chambers. Please confirm your selection and try again.";
viewmodel.errorCatcher = errorString;
}
}
viewmodel.justAttemptedRoutingChange = true;
return PartialView("~/Views/Shared/_ChangeCurrentRouter.cshtml", viewmodel);
}发布于 2016-01-21 18:14:23
当您单击OK按钮时,我不确定您在做什么。我假设它向操作方法提交了一个表单,并且您将在某些usecase上再次将已发布的模型返回到视图(可能是在模型验证失败时吗?)。每当您将对象返回到视图时,都需要确保再次加载JPortalChanerUsersAsItems集合属性。因为Http是无状态的,并且它不会在多个请求之间持久化该属性的值。
[HttpPost]
public ActionResult SomeAction(PortalIndexView model)
{
if(ModelState.IsValid)
{
// to do : Save and redirect
}
// Reload the collection.
// I hard coded 2 items here. But you may get it from db and use it
model.JPortalChamberUsersAsItems = new List<SelectListItem> {
new SelectListItem { Value="1", Text="Detroit" } ,
new SelectListItem { Value="2", Text="Ann Arbor" }
};
return View(model);
}https://stackoverflow.com/questions/34929791
复制相似问题