asp net mvc3发布要操作的对象列表

时间:2012-12-08 00:32:53

标签: asp.net asp.net-mvc-3

我用aspnet mvc3创建了一个页面。它将所有用户信息显示为列表。我想用这个清单做点什么。每个项目都有一些复选框。当我单击一些复选框并按下提交按钮时,我想将整个列表作为集合发布,并将此集合的每个项目保存到数据库。互联网上有几个笔记,但没有确切的解决方案。我有一个UserDto。并希望使用它来传输所有部分中的用户数据。

有没有人对此有任何完整的解决方案,或者他们能否提出任何想法?

提前致谢。

凯雷姆

2 个答案:

答案 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);
}