我問,因爲我不能讓這個代碼工作。 我收到一個異常; 「無法更新'ITOC.WebUI.Models.Contract'類型的模型。」 這似乎不是很有幫助。MVC 2 UpdateModel - 它是如何工作的?
**編輯** 上述例外已解決,因爲前綴中存在拼寫錯誤,這是一種經典的「魔術字符串」。現在的問題是,沒有得到更新! ** END編輯**
我不得不承認我不清楚UpdateModel是如何工作的,我不清楚前綴是如何工作的。 viewmodel在網頁中指定;
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<ITOC.WebUI.Models.ContractViewModel>" %>
和ViewModelClass是
public class ContractViewModel
{
//private ITOCEntities db = new ITOCEntities();
public Contract contract { get; set; }
public IList<ContractType> contractTypes { get; set; }
public IEnumerable<SelectListItem> contractTypesSelectList
{
get
{
return this.contractTypes.Select(item => new SelectListItem
{
Text = item.ContractType1,
Value = item.ContractTypeId.ToString()
});
}
}
public Contact clientContact { get; set; }
public Contact contractAdministratorContact { get; set; }
public ContractViewModel()
{
using (var db = new ITOCEntities())
{
this.contractTypes = db.ContractTypes.ToList();
this.clientContact = new Contact();
this.contractAdministratorContact = new Contact();
this.clientContact.ContactTypeId =
db.ContactTypes.Where(x => x.ContactType1 == "Client").SingleOrDefault().ContactTypeId;
this.contractAdministratorContact.ContactTypeId =
db.ContactTypes.Where(x => x.ContactType1 == "CA").SingleOrDefault().ContactTypeId;
}
}
public ContractViewModel(int contractId)
{
using (var db = new ITOCEntities())
{
this.contractTypes = db.ContractTypes.ToList();
this.contract = db.Contracts.Where(x => x.ContractId == contractId).SingleOrDefault();
this.clientContact =
db.Contacts.Where(x => x.ContactId == this.contract.ClientContactId).SingleOrDefault();
this.contractAdministratorContact =
db.Contacts.Where(x => x.ContactId == this.contract.ContractAdministratorContactId).SingleOrDefault();
}
}
}
的控制器是;
[Authorize(Roles = "Inputter")]
[HttpPost]
public ActionResult Edit(int contractId, FormCollection formValues)
{
if (ModelState.IsValid)
{
using (var db = new ITOCEntities())
{
var contract = db.Contracts.Single(x => x.ContractId == contractId);
string letter = contract.ContractNo_Letter;
UpdateModel(contract, "Contracts");
var clientContact = db.Contacts.Single(x => x.ContactId == contract.ClientContactId);
UpdateModel(clientContact, "Contact");
var contractAdministrationContact =
db.Contacts.Single(x => x.ContactId == contract.ContractAdministratorContactId);
UpdateModel(contractAdministrationContact, "Contact");
db.SaveChanges();
}
return RedirectToAction("List");
}
return View();
}
你試過我建議的嗎? – hunter 2010-08-19 13:58:42
是的,請參閱您的名下的評論。 – arame3333 2010-08-19 14:10:31
我在想這個問題是前綴的名字。類的名稱是「Contract」,但是會引發異常,就像「contract」一樣。 「合同」不會引發異常,但不會更新。 – arame3333 2010-08-19 16:20:34