我正在尝试动态地将项目添加到列表中,并在提交后将这些项目显示在我的控制器中,但是现在我甚至没有显示现有的列表项目。
我不是100%的问题,但它似乎与为每个项目呈现的局部视图有关。
的ViewModels :
public class UserGroupVM
{
public int Id { get; set; }
[Required]
[Display(Name = "Usergruppe")]
public string Name { get; set; }
[Display(Name = "Beschreibung")]
public string Description { get; set; }
[Required]
public Boolean IsGlobal { get; set; }
public List<Employee_UserGroupVM> Employees { get; set; }
}
public class Employee_UserGroupVM
{
public int Id { get; set; }
[Display(Name = "Kennung")]
public string SamAccountName { get; set; }
[Display(Name = "Name")]
public string LastnameFirstName { get; set; }
[Display(Name = "Admin")]
public bool IsAdmin { get; set; }
}
表单 - 视图:
@model DAKCrmImport.Web.Models.UserGroupVM
@{
ViewBag.Title = "_UserGroup";
}
@using (Html.BeginForm("Save", "UserGroup", FormMethod.Post, new { Id = "form-usergroup-add", novalidate = "false" }))
{
<fieldset>
<div class="container-form-clear">
<a class='button form-clear' title='Formular leeren'>button clear</a>
</div>
@Html.HiddenFor(model => model.Id)
@Html.LabelFor(model => model.Name, new { @class = "label req" })
@Html.TextBoxFor(model => model.Name, new { @class = "input"})
@Html.LabelFor(model => model.Description, new { @class = "label" })
@Html.TextAreaFor(model => model.Description, new { @class = "input", rows = "3", cols = "25" })
<br />
<a class='button form-add' title='MA-Berechtigung hinzufügen' id="bt-employee-add">button employee-add</a>
@for (int i = 0; i < Model.Employees.Count(); i++)
{
@Html.EditorFor(m => m.Employees[i]);
}
<input type="submit" name="submit" class="submit form-button" value="Speichern" id="bt-submit-usergroup" />
</fieldset>
}
部分视图:
@model DAKCrmImport.Web.Models.Employee_UserGroupVM
@{
ViewBag.Title = "_EmployeeList";
}
<div class="div-employee-add">
<div class="container-right">
<a class="button form-remove-employee" title="MA entfernen" id="bt-employee-delete">button ma-remove</a>
</div>
<div class="container-left">
@Html.LabelFor(model => model.SamAccountName)
@Html.TextBoxFor(model => model.SamAccountName, new { @class = "textbox-samaccountname" })
@Html.TextBoxFor(model => model.LastnameFirstName, new { @class = "textbox-lastnamefirstname", disabled = "disabled" })
@Html.LabelFor(model => model.IsAdmin)
@Html.CheckBoxFor(model => model.IsAdmin, new { @class = "checkbox-isadmin" })
</div>
</div>
控制器:
public virtual ActionResult BlankEmployeeRow()
{
return PartialView("EditorTemplates/Employee_UserGroupVM", new Employee_UserGroupVM());
}
public virtual ActionResult Save(UserGroupVM usergroup)
{
return null;
}
到目前为止,我唯一注意到的是,如果我不使用局部视图并通过索引显示其变量,则现有项Employees
会出现在控制器中。因为我不能在局部视图本身中进行任何索引,所以它现在不起作用。我不知道如何解决这个问题,无论是新的还是编辑的项目是否会出现都是值得怀疑的。
我真的很感激一点帮助。
P.S。我知道如何通过jQuery阅读模型,但我想使用MVC的原生表单提交方法,而不用其他代码。
[更新]我从部分视图中创建了一个EditorTemplate,现在existring Employees已经提交,但是其他员工仍然没有提交。即使它们出现在标记中......
通过jquery / partial view添加新项目:
$(document).on('click', '#bt-employee-add', function () {
var lastDiv = $("[class~='div-employee-add']").first();
var lastTextBox = $(lastDiv).find("[class~='textbox-lastnamefirstname']");
var url = $("#EmployeeAdd").data('request-url');
var params = null;
if (lastTextBox.val() == "") {
//Notification
} else {
$(getJSONfromController(url, params, null, true)).insertBefore($(".div-employee-add").first());
}
});
答案 0 :(得分:1)
试试这个:
@Html.Partial("_EmployeeList", Model.Employees, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Employees" }
})
问题是部分人不知道列表的名称,所以你必须明确指定它。
答案 1 :(得分:0)
当您使用简单的ViewModel时,您的数据不会动态更新,因为您的网页不会轮询您的服务器。它只会在刷新时获得新数据。
您必须使用计时器进行投票或查看角度,淘汰或余烬。