1

我对 ASP 和 MVC 比较陌生,但到目前为止一切正常。我正在使用 DB first 方法并设置我的 DB 表(它是用 FK 等清理的现有 DB)。

我有一条 FK 路线:

Contact
    - LettingContact
         - Landlord          
         - Tenant

我希望能够使用部分来显示数据,例如 /Contact/_Create 将保存联系信息,即标题、名字、姓氏,并将由 /Contact/Create 和 /Tenant/Create 使用。我设法让它工作而不使用部分,而只是使用租户/创建 html 表单上的字段并显示模型中的相关数据。对于控制器中的租户/创建,我执行了以下操作(执行以下操作阻止了我在部分中获得空异常)

Tenant tenant = new Tenant();
LettingsContact lettingsContact = new LettingsContact();
Contact contact = new Contact();
tenant.LettingsContact = letContact;
tenant.LettingsContact.Contact = contact;
return View(tenant)

现在视图是

//using Html.BeginForm etc

@{
   Html.RenderPartial("../Contact/_Create", Model.LettingsContact.Contact);
   Html.RenderPartial("_Create", Model);
}


<input type="submit" value="create">

//rest of html

现在,当我单击提交按钮时,它会转到我的 /Tenant/Create 发布事件。

[HttpPost]
public ActionResult Create(Tenant  tenant)
{
     if (ModelState.IsValue)
     {
         tenant.ContactID = Guid.NewGuid();
         tenant.LettingsContact.Contact.ContactID = tenant.ContactID;
         db.Tenants.AddObject(tenant);
         db.SaveChanges();
         return RedirectToAction("Index");             
     }
}

但是,读取tenant.LettingContact.Contact.ContactID崩溃的行将对 LettingsContact 的 NullReferenceException 为空。部分不维护模型的任何原因?

另外,如果有更好的方法,请告诉我,因为这对我来说仍然很新。

我想使用 partials 的原因是它可以让我重用 jQuery 模态表单等中的表单。

4

1 回答 1

1

如果您希望表单回发您不希望在页面上显示的信息,您应该使用隐藏字段。看看Html.Hidden()Html.HiddenFor()

隐藏在 msdn 上:http: //msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hidden.aspx

msdn 上的 HiddenFor:http: //msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hiddenfor.aspx

于 2012-07-08T08:44:13.327 回答