我的域模型是具有一个或多个CompanyAdmin实体的公司实体。
我意识到,对于在发布表单值时默认的模型绑定器,CompanyAdmin实体必须具有唯一的名称。
首次浏览该页面时,公司或CompanyAdmin都没有数据。这意味着,此代码在视图中不起作用,因此不显示输入文本框。
@Html.EditorFor(model => model.Company.CompanyContacts)
因此,要使它们显示我使用:
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).FirstName)
但是,现在问题是在POST时模型绑定不起作用。我能找到的所有例子都使用已经创建的数据。
我怎样才能让它发挥作用?
视图模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ContractorDirect.Models
{
public class CompanyAdminViewModel
{
public Company Company { get; set; }
public RegisterModel UserReg { get; set; }
}
}
控制器
public ViewResult CompanyAdmin(int? id)
{
CompanyAdminViewModel cavm = new CompanyAdminViewModel();
jobTitleRepository = new JobTitleRepository();
companyContactRepository = new CompanyContactRepository();
var jobtitles = jobTitleRepository.All;
ViewBag.JobTitleId = new SelectList(jobtitles, "JobTitleId", "JobName");
if (id.HasValue)
{
cavm.Company = companyRepository.Find((int)id);
cavm.Company.CompanyContacts = companyContactRepository.All.Where(admin=>admin.IsCompanyAdmin).ToList();
return View(cavm);
}
cavm.Company = new Company();
cavm.Company.CompanyContacts = new List<CompanyContact>();
cavm.UserReg = new RegisterModel();
return View(cavm);
}
[HttpPost]
public ActionResult CompanyAdmin(CompanyAdminViewModel cavm)
{
JobTitleRepository rep = new JobTitleRepository();
var jobtitles = rep.All;
ViewBag.JobTitleId = new SelectList(jobtitles, "JobTitleId", "JobName");
cavm.UserReg.UserName = cavm.Company.CompanyContacts.ElementAt(0).Email;
if (ModelState.IsValid)
{
AccountController account = new AccountController();
account.Register(cavm.UserReg, "CompanyAdmin");
companyRepository.InsertOrUpdate(cavm.Company);
companyRepository.Save();
return RedirectToAction("CompanyRegistrationConfirmation");
}
else
{
return View();
}
}
查看
@model ContractorDirect.Models.CompanyAdminViewModel
@{
ViewBag.Title = "CompanyAdmin";
}
<h2>Company Admin</h2>
<table>
<tr style="vertical-align: top">
<td>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CompanyName)
@Html.ValidationMessageFor(model => model.Company.CompanyName)
</div>
<fieldset>
<legend>Company Administrator</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyContacts.ElementAt(0).JobTitleId)
</div>
<div class="editor-field">
@Html.DropDownList("JobTitleId", string.Empty)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyContacts.ElementAt(0).FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).FirstName)
@Html.ValidationMessageFor(model => model.Company.CompanyContacts.ElementAt(0).FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyContacts.ElementAt(0).LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).LastName)
@Html.ValidationMessageFor(model => model.Company.CompanyContacts.ElementAt(0).LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyContacts.ElementAt(0).Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).Email)
@Html.ValidationMessageFor(model => model.Company.CompanyContacts.ElementAt(0).Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CompanyContacts.ElementAt(0).Phone)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).Phone)
@Html.ValidationMessageFor(model => model.Company.CompanyContacts.ElementAt(0).Phone)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserReg.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserReg.Password)
@Html.ValidationMessageFor(model => model.UserReg.Password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserReg.ConfirmPassword)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserReg.ConfirmPassword)
@Html.ValidationMessageFor(model => model.UserReg.ConfirmPassword)
</div>
</fieldset>
</td>
</tr>
答案 0 :(得分:1)
好的 - 问题出在视图中
这有效
@Html.EditorFor(model => model.Company.CompanyContacts[0].FirstName)
这不是
@Html.EditorFor(model => model.Company.CompanyContacts.ElementAt(0).FirstName)