我用aspnet mvc3创建了一个页面。它将所有用户信息显示为列表。我想用这个清单做点什么。每个项目都有一些复选框。当我单击一些复选框并按下提交按钮时,我想将整个列表作为集合发布,并将此集合的每个项目保存到数据库。互联网上有几个笔记,但没有确切的解决方案。我有一个UserDto。并希望使用它来传输所有部分中的用户数据。
有没有人对此有任何完整的解决方案,或者他们能否提出任何想法?
提前致谢。
凯雷姆
答案 0 :(得分:0)
我添加了一些代码。你可以看到主要句子是什么。
这是我的索引视图细节:
@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 collection返回到我的控制器方法。
感谢您的评论。
答案 1 :(得分:0)
假设您正在创建一个添加/删除课程用户的屏幕。所以让我们创建一些viewmodels
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。转到Views/YourControllerName
和Crete一个名为“ EditorTemplates ”的文件夹,然后使用与属性名称相同的名称创建一个新视图(UserVM.cshtml
)
将此代码添加到新的编辑器模板中。
@model ChannelViewModel
<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
集合,其中所选复选框将为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);
}