gpt4 book ai didi

asp.net-mvc - MVC 父子类型模型表单提交不会将子集合发送到 Controller

转载 作者:行者123 更新时间:2023-12-02 20:59:09 25 4
gpt4 key购买 nike

我有一个公司模型,它有员工列表模型,如下所示

public class Company
{
[Required]
[Display(Name = "Company Name")]
public string Name { get; set; }

public List<EmployeeModel> Managers { get; set; }
}

以及 Employee 模型如下

public class EmployeeModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}

我的父 View 如下所示

@using (Html.BeginForm("CompanySignupSuccess", "Home", FormMethod.Post, new { @class = "horizontal-form", role = "form", enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()

@Html.ValidationSummary("", new { @class = "text-danger" })
<div>
<div class="form-group">
@Html.LabelFor(m => m.Name, new { @class = "control-label" })<span class="required">*</span>
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
</div>

<div class="form-group">
<label for="file">Logo:</label>
<input type="file" name="logo" id="logo" accept=".png,.jpg,.jpeg" />

</div>
<div id="managerList">

<div id="editorRowsManagers">
@foreach (var item in Model.Managers)
{
@Html.Partial("DetailsView", item)
}
</div>

</div>

<div class="form-group">
<input type="submit" class="btn btn-default pull-right" value="Send" />
</div>
</div>
}

以及下面显示的部分 View

@model yourAssembly.EmployeeModel
<div style="border:1px solid;margin:20px; padding:10px;">
Manager Details:
<div class="form-group">
@Html.LabelFor(m => m.Name, new { @class = "control-label" })
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "control-label" }) <span class="required">*</span>
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Phone, new { @class = "control-label" }) <span class="required">*</span>
@Html.TextBoxFor(m => m.Phone, new { @class = "form-control phoneno" })
</div>

</div>

当我单击“提交”按钮时,转到 Controller 的模型仅填充了“名称”和“ Logo ”属性,并且列表对象(管理器)为空,因此我不确定这里缺少什么。顺便说一句,我使用了员工列表,因为我想通过“添加”按钮添加更多员工,而“添加”按钮只会呈现另一个部分 View 。

public ActionResult CompanySignupSuccess(Company model)
{
if (ModelState.IsValid)
{
//do some process
}
else
{
ModelState.AddModelError("", "Invalid Data entered.");
}
// If we got this far, something failed, redisplay form
return View("CompanySignup", Model);
}

任何人都可以帮助我了解如何在单击“提交”按钮时发送子列表对象以及父类上的一些属性。

最佳答案

除非传递 HtmlFieldPrefix,否则不能使用部分代码为集合生成控件(请参阅 this answer 获取示例)。然而,正确的方法是使用 EditorTemplate。将您的部分重命名为 EmployeeModel.cshtml (即,以匹配类的名称)并将其移动到 /Views/Shared/EditorTemplates 文件夹(或 /Views/YourControllerName/EditorTemplates 文件夹)。

然后将 View 中的循环替换为

@Html.EditorFor(m => m.Managers)

它将正确生成绑定(bind)所需的name属性,即

<input ... name="Managers[0].Name" />
<input ... name="Managers[1].Name" />

etc(目前您生成的所有内容都是重复的name属性(以及重复的id属性,这是无效的html)

关于asp.net-mvc - MVC 父子类型模型表单提交不会将子集合发送到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39187811/

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