我用 aspnet mvc3 创建了一个页面。它将所有用户信息显示为列表。我想用这个列表做点什么。每个项目都有一些复选框。当我单击一些复选框并按下提交按钮时,我想将整个列表作为一个集合发布并将该集合的每个项目保存到数据库中。网上有很多注释,但没有确切的解决方案。我有一个 UserDto。并想用它来传输所有部分的用户数据。
有没有人对此有任何完整的解决方案,或者他们可以给出任何想法?
提前致谢。
凯雷姆
我用 aspnet mvc3 创建了一个页面。它将所有用户信息显示为列表。我想用这个列表做点什么。每个项目都有一些复选框。当我单击一些复选框并按下提交按钮时,我想将整个列表作为一个集合发布并将该集合的每个项目保存到数据库中。网上有很多注释,但没有确切的解决方案。我有一个 UserDto。并想用它来传输所有部分的用户数据。
有没有人对此有任何完整的解决方案,或者他们可以给出任何想法?
提前致谢。
凯雷姆
我添加了一些代码。你可以看到引导句它们是关于什么的。
这是我的索引视图详细信息:
@model List<DomainModel.UserApprovalDto>
@{
ViewBag.Title = "Manage Users";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Manage Users</h2>
<div>@Html.Partial("_PartialManageUsers", (List<DomainModel.UserApprovalDto>)Model) </div>
这是我的部分视图细节:
@model List<DomainModel.UserApprovalDto>
@using (Html.BeginForm("ConfirmUsers", "ManageUsers", FormMethod.Post))
{
<table>
<tr>
<th>
Name
</th>
<th>
Is Reported
</th>
</tr>
@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>
@Html.DisplayFor(modelItem => Model[i].FirstName)
</td>
<td>
@Html.CheckBox("IsReported", Model[i].IsReported.HasValue ? Model[i].IsReported.Value : false)
@*@Html.CheckBoxFor(modelItem => Model[i].IsReported.Value);*@ @* @if (Model[i].IsReported != null)
{
@Html.CheckBoxFor(modelItem => Model[i].IsReported.Value);
}
else
{
@Html.CheckBoxFor(modelItem => Model[i].IsReported.Value);
}*@
</td>
<td>
</td>
</tr>
}
</table>
<div>
<input name="submitUsers" type="submit" value="Save" />
</div>
}
这是我的控制器提交方法
[HttpPost]
public ActionResult ConfirmUsers(List<DomainModel.UserApprovalDto> collection)
{
if (ModelState.IsValid)
{
//TO-DO
}
return RedirectToAction("Index");
}
最后一个是我的 DTO 课程详细信息:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DomainModel
{
public class UserApprovalDto
{
public long UserId { get; set; }
public Guid CarUserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhotoPath { get; set; }
public string PhotoSmallPath { get; set; }
public string PhotoSquarePath { get; set; }
public string PhotoBigPath { get; set; }
public bool IsBlocked { get; set; }
public bool IsDeleted { get; set; }
}
}
当我提交此代码时,我的列表将 null 集合返回到我的控制器方法。
感谢您的意见。
假设您正在创建一个向课程添加/删除用户的屏幕。所以让我们创建一些视图模型
public class CourseVM
{
public string Name { set;get;}
public int CourseID { set;get;}
public List<UserVM> Users { set;get;}
public CourseVM()
{
Users=new List<UserVM>();
}
}
public class UserVM
{
public string Name { set;get;}
public int UserID{ set;get;}
public bool IsSelected { set;get;}
}
现在在您的GET
操作中,您将填充 ViewModel 的值并将其发送到视图。
public ActionResult Add()
{
var vm = new CourseVM();
//The below code is hardcoded for demo. you may replace with DB data.
vm.Users.Add(new UseVM { Name = "Jon" , UserID=1});
vm.Users.Add(new UseVM { Name = "Scott", UserID=2 });
return View(vm);
}
现在让我们创建一个 EditorTemplate。转到并创建一个名为“ EditorTemplatesViews/YourControllerName
”的文件夹,并在那里创建一个与 Property Name( )同名的新视图UserVM.cshtml
将此代码添加到您的新编辑器模板中。
@model 频道视图模型
<p>
<b>@Model.Name</b> :
@Html.CheckBoxFor(x => x.IsSelected) <br />
@Html.HiddenFor(x=>x.Id)
</p>
EditorFor
现在在您的主视图中,使用Html Helper 方法调用您的编辑器模板。
@model CourseVM
@using (Html.BeginForm())
{
<div>
@Html.EditorFor(m=>m.Users)
</div>
<input type="submit" value="Submit" />
}
现在,当您发布表单时,您的模型将具有Users
Collection,其中 Selected Checkboxes 将具有属性True
值。IsSelected
[HttpPost]
public ActionResult Add(CourseVM model)
{
if(ModelState.IsValid)
{
//Check for model.Users collection and Each items
// IsSelected property value.
//Save and Redirect(PRG pattern)
}
return View(model);
}