gpt4 book ai didi

ASP.NET MVC 3 : Model comes empty in the controller?

转载 作者:行者123 更新时间:2023-12-05 00:01:34 26 4
gpt4 key购买 nike

我有一个表格,我只需要在几个实体之间进行选择。

所以这就是我所做的:

创建了一个 View 模型:

    public class EntityChooserModel
{
public IEnumerable<Entity> AvailableEntities { get; set; }
public int SelectedId;
}

我在 Controller 中有两个 Action ,一个带有 [HTTPPost],一个没有。在两者中,我都有一个“SessionUserData”,它是 session 数据,通过数据模型绑定(bind)进行绑定(bind)。
        [Authorize]
public ActionResult EntityChooser(SessionUserData sessionData)
{
List<Entity> entities = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).ToList();


Entity entity = sessionData.IdCurrentEntity != null ? entities.Where(e => e.Id == sessionData.IdCurrentEntity).First() : entities.First();

return View(new EntityChooserModel() { SelectedId = entity.Id, AvailableEntities = entities });
}

.
    [Authorize]
[HttpPost]
public ActionResult EntityChooser( EntityChooserModel model, SessionUserData sessionData, String returnUrl)
{
if (ModelState.IsValid)
{
Entity entity = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).Where(e => e.Id == model.SelectedId).First();
sessionData.IdCurrentEntity = entity.Id;
RedirectToDefaultPage(returnUrl);
}
return View(model);
}

强类型 View :
@model My.Full.Namespace.EntityChooserModel
@{
ViewBag.Title = "EntityChooser";
Layout = "~/Views/Shared/_LoginLayout.cshtml";
}
<div id="login-wrapper">
<div id="title">
<h1>Login</h1>
</div>
<div id="login">
@using (Html.BeginForm("EntityChooser", "Auth", FormMethod.Post, new { id = "ChooseFormId" }))
{
@Html.ValidationSummary(true, "Loggin error")
<div>
<span>Choose an entity:</span>
@Html.DropDownListFor(x => x.SelectedId, new SelectList(Model.AvailableEntities, "Id", "Name"))
</div>
<p class="right-aligned">
<a href="javascript:document.getElementById('ChooseFormId').submit();" class="adm-button">
<span class="next-btn"><span>Select</span></span></a>
</p>
<input type="submit" style="display: none" />
}
</div>
</div>

问题是当我收到第二个模型中的数据时,我有一个空对象。集合为空,id 设置为默认值(0)。

怎么了?我不知道我错过了什么。

这是我第一次做不是 ForModel() 的 mvc 表单,我第一次使用下拉列表

最佳答案

您的<form> 唯一的输入元素contains 是一个下拉列表,它在 POST 时仅将选定的值发送到服务器。这解释了为什么您的 AvailableEntities集合属性为空。

至于为什么SelectedId字段为空,这是因为您已将其定义为 字段 而不是作为 房产 .默认模型绑定(bind)器仅适用于属性。因此,如果要填充它,则必须将其定义为属性:

public int SelectedId { get; set; }

至于 AvailableEntities属性担心您可以在 POST 操作中使用所选 ID 从您的存储库中填充它。

关于ASP.NET MVC 3 : Model comes empty in the controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com