我使用aspnet mvc3創建了一個頁面。它將所有用戶信息顯示爲列表。我想用這個清單做些事情。有一些複選框屬於每個項目。當我點擊一些複選框並按提交按鈕時,我想將整個列表作爲集合發佈,並將此集合的每個項目保存到數據庫。互聯網上有幾個筆記,但沒有確切的解決方案。我有一個UserDto。並希望使用它來傳輸所有部分中的用戶數據。asp net mvc3發佈對象列表來執行
有沒有人有任何完整的解決方案,或者他們可以提供任何想法?
在此先感謝。
Kerem
我使用aspnet mvc3創建了一個頁面。它將所有用戶信息顯示爲列表。我想用這個清單做些事情。有一些複選框屬於每個項目。當我點擊一些複選框並按提交按鈕時,我想將整個列表作爲集合發佈,並將此集合的每個項目保存到數據庫。互聯網上有幾個筆記,但沒有確切的解決方案。我有一個UserDto。並希望使用它來傳輸所有部分中的用戶數據。asp net mvc3發佈對象列表來執行
有沒有人有任何完整的解決方案,或者他們可以提供任何想法?
在此先感謝。
Kerem
我添加了一些我的代碼。你可以看到他們的主要句子。
這是我的索引視圖的細節:
@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集合到我的控制器方法。
感謝您的意見。
如果您有其他信息可以添加到您的問題中,則應該使用問題下的「編輯」鏈接。 –
假設您正在創建一個將用戶添加到課程中的屏幕。因此,讓我們創建一些的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);
}
你有什麼代碼,你已經嘗試過什麼不工作?您是否爲視圖的數據創建了模型,然後嘗試處理回發中的數據更改?我建議您查看http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-4 – viperguynaz