使用复选框保存到 m-2-m
本文关键字:m-2-m 保存 复选框 | 更新日期: 2023-09-27 18:31:56
>所以我试图使用[Slauma的答案][1]
到目前为止,我所做的,
模型视图模型潜在客户用户
public int Id { get; set; }
public string User { get; set; }
public IEnumerable<ViewModelUserProspectSelect> Prospects { get; set; }
模型视图模型用户潜在客户选择
public int ProspectID { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
查看潜在客户中的用户
@model OG.ModelView.ViewModelProspectUsers
@using (Html.BeginForm())
{
<div class="container">
<div class="contentContainer">
@Html.HiddenFor(model => model.Id)
Prospects for User <h3>@Html.DisplayTextFor(model => model.User)</h3>
</div>
<div class="contentContainer2">
<h5>Please Select Prospects you wish to assign to this User.</h5>
<p></p>
@Html.EditorFor(model => model.Prospects)
</div>
<input type="submit" value="Save changes" />
@Html.ActionLink("Cancel", "Index")
</div>
}
编辑器视图位于 ChangeUserInfo/EditorTemplates/*_ViewModelUserprospectSelect.cshtml* 下
@model OG.ModelView.ViewModelUserProspectSelect
@Html.HiddenFor(model => model.ProspectID)
@Html.HiddenFor(model => model.Name)
test
@Html.LabelFor(model => model.IsSelected, Model.Name)
@Html.EditorFor(model => model.IsSelected)
[获取] 方法 用户在潜在客户操作
public ActionResult UsersInProspect(int id = 0)
{
var data = db.UserProfiles
.Where(s => s.UserID == id)
.Select(s => new
{
ViewModel = new ViewModelProspectUsers
{
Id = s.UserID,
User = s.UserName
},
prospects = s.Prospects.Select(c => c.ProspectID)
})
.SingleOrDefault();
if (data == null)
return HttpNotFound();
// Load all companies from the DB
data.ViewModel.Prospects = db.Prospect
.Select(c => new ViewModelUserProspectSelect
{
ProspectID = c.ProspectID,
Name = c.ProspectName
})
.ToList();
// Set IsSelected flag: true (= checkbox checked) if the company
// is already related with the subscription; false, if not
foreach (var c in data.ViewModel.Prospects)
c.IsSelected = data.prospects.Contains(c.ProspectID);
return View(data.ViewModel);
}
[HttpPost] 方法 UserInProspect Action
public ActionResult UsersInProspect(ViewModelProspectUsers viewModel)
{
if (ModelState.IsValid)
{
var subscription = db.UserProfiles.Include(s => s.Prospects)
.SingleOrDefault(s => s.UserID == viewModel.Id);
if (subscription != null)
{
// Update scalar properties like "Amount"
//subscription.Prospects = viewModel.Prospects;
//subscription. = subscription.
//List<string> myList = new List<string>();
//myList = viewModel.Prospects.Cast<String>().ToList();
//IEnumerable<dbProspect> Isubscription = subscription.Prospects;
////or explicit:
//var iPersonList = (IEnumerable<dbProspect>)myList;
// or more generic for multiple scalar properties
// _context.Entry(subscription).CurrentValues.SetValues(viewModel);
// But this will work only if you use the same key property name
// in ViewModel and entity
foreach (var prospect in viewModel.Prospects)
{
if (prospect.IsSelected)
{
if (!subscription.Prospects.Any(
c => c.ProspectID == prospect.ProspectID))
{
// if company is selected but not yet
// related in DB, add relationship
var addedProspect = new dbProspect { ProspectID = prospect.ProspectID };
db.Prospect.Attach(addedProspect);
subscription.Prospects.Add(addedProspect);
}
}
else
{
var removedProspect = subscription.Prospects
.SingleOrDefault(c => c.ProspectID == prospect.ProspectID);
if (removedProspect != null)
// if company is not selected but currently
// related in DB, remove relationship
subscription.Prospects.Remove(removedProspect);
}
}
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(viewModel);
}
添加了对我的控制器的引用 奥格。视图.更改用户信息.编辑器模板;
再次删除它。"编辑器模板"不应该是一个命名空间。
在下添加了编辑器模板 视图/更改用户/信息/编辑器模板/视图模型用户前景选择.cs
"编辑器模板"不是 C# ( .cs
) 代码文件,而是 Razor 视图 ( .cshtml
)。将文件ViewModelUserProspectSelect.cs
移动到 ViewModelProspectUsers.cs
所在的文件夹,并将其命名空间更改为两个类的相同 (OG.Models
)。
(为什么路径中有子文件夹/Info/
???还是错别字,只是Views/ChangeUsersInfo/EditorTemplates
的意思?我假设控制器有名字ChangeUsersInfoController
,对吧?
然后在 Views/ChangeUsersInfo/EditorTemplates
文件夹中创建一个新文件ViewModelUserProspectSelect.cshtml
,其中包含另一个答案(以下答案)的视图:
@model OG.Models.ViewModelUserProspectSelect
@Html.HiddenFor(model => model.ProspectID)
@Html.HiddenFor(model => model.Name)
@Html.LabelFor(model => model.IsSelected, Model.Name)
@Html.EditorFor(model => model.IsSelected)
主视图中的div 元素contentContainer2
应如下所示:
<div class="contentContainer2">
<h5>Please Select Prospects you wish to assign to this User.</h5>
@Html.EditorFor(model => model.Propects)
</div>