2012-12-08 41 views
0

我使用aspnet mvc3創建了一個頁面。它將所有用戶信息顯示爲列表。我想用這個清單做些事情。有一些複選框屬於每個項目。當我點擊一些複選框並按提交按鈕時,我想將整個列表作爲集合發佈,並將此集合的每個項目保存到數據庫。互聯網上有幾個筆記,但沒有確切的解決方案。我有一個UserDto。並希望使用它來傳輸所有部分中的用戶數據。asp net mvc3發佈對象列表來執行

有沒有人有任何完整的解決方案,或者他們可以提供任何想法?

在此先感謝。

Kerem

+0

你有什麼代碼,你已經嘗試過什麼不工作?您是否爲視圖的數據創建了模型,然後嘗試處理回發中的數據更改?我建議您查看http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-4 – viperguynaz

回答

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集合到我的控制器方法。

感謝您的意見。

+0

如果您有其他信息可以添加到您的問題中,則應該使用問題下的「編輯」鏈接。 –

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行動,你將填補視圖模型的值,並將其發送到視圖。

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和克里特島一家名爲「EditorTemplates」文件夾,並使用相同的名稱作爲屬性名的創建一個新的觀點有(UserVM.cshtml

將此代碼添加到您的新的編輯器的模板。

@model ChannelViewModel

<p> 
    <b>@Model.Name</b> : 
    @Html.CheckBoxFor(x => x.IsSelected) <br /> 
    @Html.HiddenFor(x=>x.Id) 
</p> 

現在在主視圖中,使用EditorFor HTML輔助方法調用你的編輯模板。

@model CourseVM 
@using (Html.BeginForm()) 
{  
    <div> 
     @Html.EditorFor(m=>m.Users)   
    </div>  
    <input type="submit" value="Submit" /> 
} 

現在,當您發佈的形式,你的模型將有Users收集所選擇的複選框將具有用於IsSelected物業一True值。

[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); 
}