मैं अपने व्यू से नियंत्रक को वापस एक फॉर्म HttpPost के माध्यम से एक व्यूमोडेल पास कर रहा हूं। हालांकि, लौटाए गए मूल्य हमेशा शून्य होते हैं।एमवीसी व्यू देखें मॉडेल एचटीपीपोस्ट रिटर्न वैल्यू हमेशा शून्य
ViewModel
public class vmCompanyAddress
{
public StatelyTechAdmin.Models.Company Company { get; set; }
public StatelyTechAdmin.Models.CompanyAddress Address { get; set; }
public SelectList Counties { get; set; }
}
कंपनी क्लास मॉडल
public class Company
{
[Key]
public virtual long CompanyId { get; set; }
[Required]
[Display(Name = "Company Name")]
public virtual string Name { get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual IEnumerable<CompanyAddress> CompanyAddresses { get; set; }
}
CompanyAddress क्लास मॉडल
public class CompanyAddress
{
[Key]
public virtual long CompanyAddressId { get; set; }
[Required]
public virtual long CompanyId { get; set; }
[ForeignKey("CompanyId")]
public virtual Company Company { get; set; }
[Required]
public virtual int CopmanyAddressTypeId { get; set; }
[ForeignKey("CopmanyAddressTypeId")]
public virtual CompanyAddressType CompanyAddressType { get; set; }
[Display(Name = "Address 1")]
public virtual string Address1 { get; set; }
[Display(Name = "Address 2")]
public virtual string Address2 {get; set; }
[Display(Name = "Town")]
public virtual string Town { get; set; }
[Display(Name = "City")]
public virtual string City { get; set; }
[Required]
public virtual long CountyId { get; set; }
[ForeignKey("CountyId")]
[Display(Name = "County")]
public virtual County County { get; set; }
[Required]
[Display(Name = "Postal Code")]
public virtual string PostalCode { get; set; }
public virtual DateTime CreatedDate { get; set; }
}
नियंत्रक (मिल):
// GET: /Company/Create
public ActionResult Create()
{
vmCompanyAddress vm = new vmCompanyAddress();
vm.Counties = new SelectList(db.County, "CountyId", "Name", -1);
//vm.Address = new CompanyAddress();
//vm.Company = new Company();
return View(vm);
}
नियंत्रक (पोस्ट):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(vmCompanyAddress company)
{
if (ModelState.IsValid)
{
db.Companies.Add(company.Company);
//Amend Address Company & Address Type before save to DB
company.Address.CompanyId = company.Company.CompanyId;
company.Address.CopmanyAddressTypeId = 1;
db.CompanyAddress.Add(company.Address);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(company);
}
देखें (बनाने)
@model StatelyTechAdmin.ViewModels.vmCompanyAddress
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Company</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Company.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.Name)
@Html.ValidationMessageFor(model => model.Company.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Company.CreatedDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Company.CreatedDate)
@Html.ValidationMessageFor(model => model.Company.CreatedDate)
</div>
@* Invoice Address *@
<div class="editor-label">
@Html.LabelFor(model => model.Address.Address1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address.Address1)
@Html.ValidationMessageFor(model => model.Address.Address1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Address.Address2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address.Address2)
@Html.ValidationMessageFor(model => model.Address.Address2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Address.Town)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address.Town)
@Html.ValidationMessageFor(model => model.Address.Town)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Address.City)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address.City)
@Html.ValidationMessageFor(model => model.Address.City)
</div>
@*<div class="editor-label">
@Html.LabelFor(model => model.Address.County)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Address.CountyId, Model.Counties)
</div>*@
<div class="editor-label">
@Html.LabelFor(model => model.Address.PostalCode)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Address.PostalCode)
@Html.ValidationMessageFor(model => model.Address.PostalCode)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
किसी के बारे में कोई सलाह प्रदान करते हैं कृपया मेरे रिटर्न व्यू मॉडेल मान क्यों नल होते हैं जब सभी फ़ील्ड आबादी वाले होते हैं?
मैंने नेटवर्क रिकॉर्ड सुविधा का उपयोग करके Google क्रोम ब्राउज़र में चेक किया है और सभी मान JSON प्रारूप में वापस पोस्ट किए गए हैं।
बहुत धन्यवाद।
------------ संपादित ---------------
यहाँ मैं क्या गूगल क्रोम नेटवर्क से देख सकते हैं का हिस्सा है मॉनिटर
Company.Name:ABC123 Company.CreatedDate: 2014/05/13 00:00:00 ....
तो यह निश्चित रूप से वापस आ जा रहा है।
काफी अजीब बात है, किसी को वापस "Company.Name" पोस्टिंग के साथ एक समान मुद्दा पड़ा है। Funsies के लिए, उस फ़ील्ड को हटाने का प्रयास करें और देखें कि क्या यह अभी भी सब कुछ वापस पोस्ट करता है। http://stackoverflow.com/questions/780026/asp-net-mvc-model-binding-returning-null-values –
CompanyAddressTypeId गलत वर्तनी है। साथ ही, इस तरह अपने फॉर्म को परिभाषित करने का प्रयास करें - Html.BeginForm ("yourControllerNameHere", "Create", FormMethod.Post) – JB06
धन्यवाद @ErikElkins हालांकि, मेरे व्यू से Company.Name को हटाकर कोई फर्क नहीं पड़ता। सबकुछ अभी भी न्यूल के रूप में वापस पोस्ट करता है। – RobHurd