C# Asp.net mvc-查看控制器,列表<;模型>;是空的
我的模型:C# Asp.net mvc-查看控制器,列表<;模型>;是空的,c#,asp.net-mvc,C#,Asp.net Mvc,我的模型: public class AdminPageModel { public int? JobID { get; set; } [DisplayName("Description")] public string Description { get; set; } [DisplayName("Weight")] public decimal Weight { get; set; } public int ID { get; set;
public class AdminPageModel
{
public int? JobID { get; set; }
[DisplayName("Description")]
public string Description { get; set; }
[DisplayName("Weight")]
public decimal Weight { get; set; }
public int ID { get; set; }
}
表格1:
using (Html.BeginForm("EditTemplate", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Count; i++)
{
<div class="form-group">
@if (Model[i].JobID != null)
{
@Html.LabelFor(m => m[i].Description)
@Html.TextBoxFor(m => m[i].Description)
@Html.LabelFor(m => m[i].Weight)
@Html.TextBoxFor(m => m[i].Weight)
@Html.HiddenFor(m => m[i].ID)
@Html.HiddenFor(m => m[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteTemplate", new { id = @Model[i].ID, jobID = selectedJobID })
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}
使用(Html.BeginForm(“EditTemplate”、“Config”、FormMethod.Post、new{@class=“form horizontal”}))
{
对于(var i=0;im[i].Description)
@Html.TextBoxFor(m=>m[i].Description)
@Html.LabelFor(m=>m[i].Weight)
@Html.TextBoxFor(m=>m[i].Weight)
@Html.HiddenFor(m=>m[i].ID)
@Html.HiddenFor(m=>m[i].JobID)
@Html.ActionLink(“删除”,“删除模板”,新建{id=@Model[i].id,jobID=selectedJobID})
}
}
}
表格2:
using (Html.BeginForm("EditCompetency", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Count; i++)
{
<div class="form-group">
@if (Model[i].JobID == null)
{
@Html.LabelFor(m => m[i].Description)
@Html.TextBoxFor(m => m[i].Description)
@Html.LabelFor(m => m[i].Weight)
@Html.TextBoxFor(m => m[i].Weight)
@Html.HiddenFor(m => m[i].ID)
@Html.HiddenFor(m => m[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteCompentency", new { id = @Model[i].ID})
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}
使用(Html.BeginForm(“EditCompetency”,“Config”,FormMethod.Post,new{@class=“form horizontal”}))
{
对于(var i=0;im[i].Description)
@Html.TextBoxFor(m=>m[i].Description)
@Html.LabelFor(m=>m[i].Weight)
@Html.TextBoxFor(m=>m[i].Weight)
@Html.HiddenFor(m=>m[i].ID)
@Html.HiddenFor(m=>m[i].JobID)
@Html.ActionLink(“删除”,“删除补偿”,新{id=@Model[i].id})
}
}
}
控制器:
[HttpPost]
public ActionResult EditCompetency(List<AdminPageModel> modelList)
{
// stuff
}
[HttpPost]
public ActionResult EditTemplate(List<AdminPageModel> modelList)
{
// stuff
}
[HttpPost]
公共行动结果编辑能力(列表模型列表)
{
//东西
}
[HttpPost]
公共操作结果编辑模板(列表模型列表)
{
//东西
}
问题就在这里。我有模板和能力。我可以全天添加/删除。尝试编辑时遇到问题
模板完全没有问题,只有能力。如果我添加了一个能力,但没有模板存在,那么编辑工作就可以了。但是,如果在我尝试编辑能力时存在模板,则
列表模型列表
(我的视图是强类型化的类型)将作为null输入。如果我删除模板,我可以编辑我的心内容的能力。今天早上我花了很多时间在这上面 下面是一个示例,说明如何将能力数据和模板数据组合到单个viewmodel中,以避免控件名称重叠
ConfigController.cs
[HttpGet]
public ActionResult Index()
{
AdminViewModel viewModel = // Get Data Somehow
return View(viewModel);
}
[HttpPost]
public ActionResult EditCompetency(AdminViewModel viewModel)
{
// access competency data with viewModel.Competencies
}
[HttpPost]
public ActionResult EditTemplate(AdminViewModel viewModel)
{
// access template data with viewModel.Templates
}
AdminViewModel.cs(新类)
公共类AdminViewModel
{
公共列表模板{get;set;}
公共列表{get;set;}
}
AdminPage.cshtml
@model AdminViewModel
using (Html.BeginForm("EditTemplate", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Templates.Count; i++)
{
<div class="form-group">
@if (Model.Templates[i].JobID != null)
{
@Html.LabelFor(m => m.Templates[i].Description)
@Html.TextBoxFor(m => m.Templates[i].Description)
@Html.LabelFor(m => m.Templates[i].Weight)
@Html.TextBoxFor(m => m.Templates[i].Weight)
@Html.HiddenFor(m => m.Templates[i].ID)
@Html.HiddenFor(m => m.Templates[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteTemplate", new { id = @Model.Templates[i].ID, jobID = selectedJobID })
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}
using (Html.BeginForm("EditCompetency", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Competencies.Count; i++)
{
<div class="form-group">
@if (Model.Competencies[i].JobID == null)
{
@Html.LabelFor(m => m.Competencies[i].Description)
@Html.TextBoxFor(m => m.Competencies[i].Description)
@Html.LabelFor(m => m.Competencies[i].Weight)
@Html.TextBoxFor(m => m.Competencies[i].Weight)
@Html.HiddenFor(m => m.Competencies[i].ID)
@Html.HiddenFor(m => m.Competencies[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteCompentency", new { id = @Model.Competencies[i].ID})
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}
@model AdminViewModel
使用(Html.BeginForm(“EditTemplate”、“Config”、FormMethod.Post、new{@class=“form horizontal”}))
{
对于(var i=0;im.Templates[i].Description)
@Html.TextBoxFor(m=>m.Templates[i].Description)
@LabelFor(m=>m.Templates[i].Weight)
@Html.TextBoxFor(m=>m.Templates[i].Weight)
@Html.HiddenFor(m=>m.Templates[i].ID)
@Html.HiddenFor(m=>m.Templates[i].JobID)
@Html.ActionLink(“删除”,“删除模板”,新建{id=@Model.Templates[i].id,jobID=selectedJobID})
}
}
}
使用(Html.BeginForm(“EditCompetency”、“Config”、FormMethod.Post、new{@class=“form horizontal”}))
{
对于(变量i=0;im.Competencies[i].说明)
@Html.TextBoxFor(m=>m.Competencies[i].说明)
@LabelFor(m=>m.Competencies[i].Weight)
@Html.TextBoxFor(m=>m.Competencies[i].Weight)
@Html.HiddenFor(m=>m.Competencies[i].ID)
@Html.HiddenFor(m=>m.capabilities[i].JobID)
@Html.ActionLink(“删除”,“删除补偿”,新{id=@Model.capabilities[i].id})
}
}
}
这两个表单是否在同一页上?如果它们是相同的,那么您将拥有具有相同名称和ID的控件,这可能会以几种不同的方式导致问题。它们确实位于同一页上。您可以尝试将它们放在不同的页上吗?或者,让页面的viewmodel包含两个列表:一个用于模板,另一个用于补充。然后将这两个列表绑定到适当的表单。现在基本上是将相同的数据绑定到两个表单。如果这对你来说没有意义,我可以在回答中写出一些代码。如果你不介意的话,举个例子会很有帮助。我刚刚为你添加了一个例子。如果有帮助,请告诉我。
@model AdminViewModel
using (Html.BeginForm("EditTemplate", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Templates.Count; i++)
{
<div class="form-group">
@if (Model.Templates[i].JobID != null)
{
@Html.LabelFor(m => m.Templates[i].Description)
@Html.TextBoxFor(m => m.Templates[i].Description)
@Html.LabelFor(m => m.Templates[i].Weight)
@Html.TextBoxFor(m => m.Templates[i].Weight)
@Html.HiddenFor(m => m.Templates[i].ID)
@Html.HiddenFor(m => m.Templates[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteTemplate", new { id = @Model.Templates[i].ID, jobID = selectedJobID })
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}
using (Html.BeginForm("EditCompetency", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
for (var i = 0; i < Model.Competencies.Count; i++)
{
<div class="form-group">
@if (Model.Competencies[i].JobID == null)
{
@Html.LabelFor(m => m.Competencies[i].Description)
@Html.TextBoxFor(m => m.Competencies[i].Description)
@Html.LabelFor(m => m.Competencies[i].Weight)
@Html.TextBoxFor(m => m.Competencies[i].Weight)
@Html.HiddenFor(m => m.Competencies[i].ID)
@Html.HiddenFor(m => m.Competencies[i].JobID)
<br />@Html.ActionLink("Delete", "DeleteCompentency", new { id = @Model.Competencies[i].ID})
}
</div>
}
<input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}