0
我是mvc的新手。 我們得到這個代碼來創建從鏈接多選框:如何預先從mvc中的多選框中選擇?
How do I put data into a dropdown box and be able search for it by typing?
它運作良好,但是當我實現編輯功能,它不會顯示在創建選項選擇了「研究人員」 。
下面是用於創建和編輯視圖代碼:
<div class="form-group">
@Html.Label("Researchers", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@{
List<RMS.ViewModels.AssignedResearcherData> researchers = ViewBag.Researcher;
<select style="width: 185px; " multiple id="myDDl" class="chzn-select" name="selectedResearchers" data-placeholder="Please Select Researcher(s)">
@foreach (var researcher in researchers)
{
<option value="@researcher.ResearcherID"
@(Html.Raw(researcher.Assigned ? "checked=\"checked\"" : ""))>
@researcher.FullName
</option>
}
</select>
}
</div>
</div>
下面是編輯控制器:
// GET: Submission/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Submission submission = db.Submission.Include(i => i.Researcher).Include(i => i.CESM).Include(i => i.Publication).Include(i => i.File).Include(i => i.AdditionalFile).Where(i => i.SubmissionID == id).Single();
PopulateAssignedResearcherData(submission);
if (submission == null)
{
return HttpNotFound();
}
ViewBag.CESMID = new SelectList(db.CESM, "CESMID", "CESMCategory", submission.CESMID);
ViewBag.PublicationID = new SelectList(db.Publication, "PublicationID", "Title", submission.PublicationID);
return View(submission);
}
private void PopulateAssignedResearcherData(Submission submission)
{
var allResearchers = db.Researcher;
var submissionResearchers = new HashSet<int>(submission.Researcher.Select(i => i.ResearcherID));
var viewModel = new List<AssignedResearcherData>();
foreach (var researcher in allResearchers)
{
viewModel.Add(new AssignedResearcherData
{
ResearcherID = researcher.ResearcherID,
FirstName = researcher.FirstName,
Surname = researcher.Surname,
Assigned = submissionResearchers.Contains(researcher.ResearcherID)
});
}
ViewBag.Researcher = viewModel;
}
// POST: Submission/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int? id, string[] selectedResearchers, HttpPostedFileBase upload, HttpPostedFileBase upload2)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var submissionToUpdate = db.Submission
.Include(i => i.Researcher)
.Include(i => i.CESM)
.Include(i => i.Publication)
.Where(i => i.SubmissionID == id)
.Single();
if (TryUpdateModel(submissionToUpdate, "",
new string[] { "CESMID", "PublicationID", "Type", "Title", "Status", "Comment", "SubmissionDate", "CapturedOnRIMS", "NumberOfAuthors", "NumberOfWitsAuthors", "TotalPages", "PagesInPreamble", "PagesInText", "NumberOfChapters", "Location" }))
{
UpdateSubmissionResearchers(selectedResearchers, submissionToUpdate);
db.SaveChanges();
return RedirectToAction("Index");
}
catch (RetryLimitExceededException /* dex */)
{
//Log the error (uncomment dex variable name and add a line here to write a log.
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
}
}
PopulateAssignedResearcherData(submissionToUpdate);
ViewBag.CESMID = new SelectList(db.CESM, "CESMID", "CESMCategory", submissionToUpdate.CESMID);
ViewBag.PublicationID = new SelectList(db.Publication, "PublicationID", "Title", submissionToUpdate.PublicationID);
return View(submissionToUpdate);
}
private void UpdateSubmissionResearchers(string[] selectedResearchers, Submission submissionToUpdate)
{
if (selectedResearchers == null)
{
submissionToUpdate.Researcher = new List<Researcher>();
return;
}
var selectedResearchersHS = new HashSet<string>(selectedResearchers);
var submissionResearchers = new HashSet<int>
(submissionToUpdate.Researcher.Select(i => i.ResearcherID));
foreach (var researcher in db.Researcher)
{
if (selectedResearchersHS.Contains(researcher.ResearcherID.ToString()))
{
if (!submissionResearchers.Contains(researcher.ResearcherID))
{
submissionToUpdate.Researcher.Add(researcher);
}
}
else
{
if (submissionResearchers.Contains(researcher.ResearcherID))
{
submissionToUpdate.Researcher.Remove(researcher);
}
}
}
}
提交型號:
public class Submission
{
public int SubmissionID { get; set; }
[Display(Name="Publication")]
public int? PublicationID { get; set; }
[Display(Name="CESM Category")]
public int CESMID { get; set; }
public string Type { get; set; }
public string Title { get; set; }
public string Status { get; set; }
public string Comment { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Submission Date")]
public DateTime SubmissionDate { get; set; }
public bool CapturedOnRIMS { get; set; }
[Display(Name = "Number Of Authors")]
public int NumberOfAuthors { get; set; }
[Display(Name = "Number Of Wits Authors")]
public int NumberOfWitsAuthors { get; set; }
[Display(Name = "Total Pages")]
public int TotalPages { get; set; }
[Display(Name = "Pages In Preamble")]
public int PagesInPreamble { get; set; }
[Display(Name = "Pages In Text")]
public int PagesInText { get; set; }
[Display(Name = "Number Of Chapters")]
public int NumberOfChapters { get; set; }
public string Location { get; set; }
public virtual ICollection<Researcher> Researcher { get; set; }
public virtual Publication Publication { get; set; }
public virtual CESM CESM { get; set; }
[Display(Name="Document")]
public virtual ICollection<File> File { get; set; }
[Display(Name="Additional Document")]
public virtual ICollection<AdditionalFile> AdditionalFile { get; set; }
}
研究員型號:
public class Researcher
{
public int ResearcherID { get; set; }
[Display(Name="School")]
public int SchoolID { get; set; }
[Required]
[StringLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[StringLength(50)]
public string Surname { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Registration Date")]
public DateTime RegistrationDate { get; set; }
[Display(Name = "Qualification Type")]
public string QualificationType { get; set; }
[Display(Name = "Job Name")]
public string JobName { get; set; }
public string Availability { get; set; }
[Display(Name="Researcher Full Name")]
public string FullName
{
get
{
return Surname + ", " + FirstName;
}
}
public virtual ICollection<Submission> Submission { get; set; }
public virtual School School { get; set; }
}
您可以顯示'Submission'模型(特別是財產您想綁定)。 –
好的我已經用「提交」和「研究員」模型更新了我的問題。 –
你不需要包含所有的屬性:)它沒有出現你有任何名爲'selectedResearchers'的屬性,所以沒有什麼可綁定的。不幸的是,鏈接中的答案是可怕的代碼。你已經在這裏發佈了太多不相關的代碼,但是你想讓所有研究人員都顯示一個列表框,並且想要顯示任何以前選擇的研究人員在列表框中被選中的想法? –