2016-10-19 51 views
-1

我的模型:Asp.net MVC - 查看到控制器,列表<model>为空

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" /> 
} 

表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" /> 

} 

控制器:

[HttpPost] 
public ActionResult EditCompetency(List<AdminPageModel> modelList) 
{ 
    // stuff 
} 

[HttpPost] 
public ActionResult EditTemplate(List<AdminPageModel> modelList) 
{ 
    // stuff 
} 

这是问题所在。我有模板和能力。我可以整天添加/删除。尝试编辑时遇到问题。

模板没有问题,只有能力。如果我添加了一个能力并且没有模板存在,那么编辑工作得很好。但是,如果我在尝试编辑能力时存在模板,则List<AdminPageModel> modelList(我的视图被强制键入的类型)为空。如果我删除了模板,我可以将该能力编辑到我的心中。我今天早上花了一大块时间在这个上做了些调整。

+0

这两种形式都在同一页上?如果他们是那么你将有相同的名称和ID控制,这可能会以几种不同的方式导致问题。 – sam2929

+0

他们确实在同一页面上。 –

+1

你可以尝试把它们放在不同的页面上吗?或者,也可以让页面的视图模型包含两个列表:一个用于模板,另一个用于Compentencies。然后将这两个列表绑定到适当的表单。现在你基本上将相同的数据绑定到两种形式。如果这对你没有意义,我可以在答案中写出一些代码。 – sam2929

回答

0

下面是如何将您的能力数据和模板数据组合为单个视图模型以便您没有重叠控件名称的示例。

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新类

public class AdminViewModel 
{ 
    public List<AdminPageModel> Templates { get; set; } 
    public List<AdminPageModel> Competencies { 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" /> 

} 
相关问题