2012-05-15 15 views
31

मैं वर्तमान में दो दृढ़ता से टाइप किए गए विचारों से बना एक फॉर्म पोस्ट करने का प्रयास कर रहा हूं। इस प्रश्न का समान है, लेकिन यह एक जवाब नहीं है:एकाधिक आंशिक विचारों के साथ एक फॉर्म पोस्ट करें

MVC 3 Razor Form Post w/ Multiple Strongly Typed Partial Views Not Binding

जब मैं फ़ॉर्म सबमिट मॉडल नियंत्रक को प्रस्तुत हमेशा रिक्त है। मैंने इसे काम करने के लिए कुछ घंटे बिताए हैं। ऐसा लगता है कि यह सरल होना चाहिए। क्या मुझसे कोई चूक हो रही है? मुझे AJAX करने की आवश्यकता नहीं है केवल नियंत्रक को पोस्ट करने और एक नया पृष्ठ प्रस्तुत करने में सक्षम होने की आवश्यकता है।

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult TransactionReport(TransactionReportRequest reportRequest) 
{ 
    var reportInfo = new List<TransactionReportItem>(); 

    if (ModelState.IsValid) 
    { 
     var reportData = _reportDataService.GetReportData(Search.MapToDomainSearchCriteria(reportRequest.SearchCriteria)); 
     if (reportData!=null) 
     { 
      reportInfo = reportData.ToList(); 
     } 
     return View(reportInfo); 
    } 
    return View(reportInfo); 
} 

आंशिक दृश्य सब वे कर रहे हैं के बाद से खुद को सुंदर अप्रासंगिक हैं:

<div> 
    @using (Html.BeginForm("TransactionReport", "Reports", FormMethod.Post, new {id="report_request"})) 
    { 
     ViewContext.FormContext.ValidationSummaryId = "valSumId"; 
     @Html.ValidationSummary(false, "Please fix these error(s) and try again.", new Dictionary<string, object> { { "id", "valSumId" } }); 
     @Html.Partial("_ReportOptions", Model.ReportOptions); 
     @Html.Partial("_TransactionSearchFields", new ViewDataDictionary(viewData) { Model = Model.SearchCriteria }); 
    } 

यहाँ नियंत्रक में कोड है:

धन्यवाद

यहाँ मेरे विचार कोड है काम करना और उनके मॉडल प्रदर्शित करना है।

+0

जहाँ आपके प्रस्तुत है बटन? इसे फॉर्म टैग के भीतर होना चाहिए। सुनिश्चित नहीं है कि आपने अभी इसे शामिल नहीं किया है या यदि यह –

उत्तर

49

आंशिक यहां जाने का तरीका नहीं हैं। आप EditorTemplates की तलाश में हैं, ये आप जो चाहते हैं उसके लिए बने हैं। इस मामले में, आपकी संपत्ति अच्छी तरह से आपके मॉडल से जुड़ी होगी (जो आप जमा करेंगे)।

आपका मुख्य देखें इस फार्म होगा (ध्यान दें कि आप केवल Partial के बजाय EditorFor उपयोग करने के लिए, इस मामले में, तो आप शायद ViewBag में है कि ViewData पैरामीटर डालने या तो की आवश्यकता होगी):

@using (Html.BeginForm("TransactionReport", "Reports", FormMethod.Post, new {id="report_request"})) 
{ 
    ViewContext.FormContext.ValidationSummaryId = "valSumId"; 
    @Html.ValidationSummary(false, "Please fix these error(s) and try again.", new Dictionary<string, object> { { "id", "valSumId" } }); 
    @Html.EditorFor(model => model.ReportOptions); 
    @Html.EditorFor(model = Model.SearchCriteria }); 
} 

अब आपको केवल अपने आंशिक को फ़ोल्डर ~/Shared/EditorTemplates/ पर खींचना होगा और मॉडल नाम से मेल खाने के लिए उनका नाम बदलें, वे संपादक टेम्पलेट्स हैं।

~/Shared/EditorTemplates/ फ़ोल्डर में, एक नया "दृश्य" बनाएं, उदाहरण "SearchCriteria.cshtml"। अंदर, "मॉडल" के रूप में उस वर्ग के प्रकार के रूप में रखें जिसके लिए आप एक संपादक टेम्पलेट बना सकते हैं।

@model MyNamespace.SearchCriteria 
<ul> 
    <!-- Note that I also use EditorFor for the properties; this way you can "nest" editor templates or create custom editor templates for system types (like DateTime or String or ...). --> 
    <li>@Html.LabelFor(m => m.Name): @Html.EditorFor(m => m.Name)</li> 
    <li>@Html.LabelFor(m => OtherCriteria): @Html.EditorFor(m => m.OtherCriteria</li> 
</ul> 

उनके बारे में कुछ अच्छी पढ़ने:

+1

टैग के बाहर है हां यह एक बेहतर समाधान है। Grails के समान कुछ है जो मुझे grails शर्तों का उपयोग कर गुग हो जाना चाहिए (मेरा मतलब है binged) :) यह महान काम करता है! सहायता के लिए धन्यवाद! – Buzzer

+4

कभी-कभी किसी चीज़ को खोजने में मुश्किल होती है जब आप किसी निश्चित तकनीक में सही शब्दावली नहीं जानते हैं। – Styxxy

+0

लॉल ... यह सच है। एक बार फिर धन्यवाद! – Buzzer

10

मैं @Styxxy और @ टोनी से सहमत हूं, संपादक टेम्पलेट्स बेहतर समाधान हैं। हालांकि, आपकी समस्या यह है कि आप आंशिक विचारों के लिए उप-मॉडल खिला रहे हैं। इस प्रकार, जब आंशिक दृश्य प्रस्तुत करता है तो यह नहीं जानता कि यह एक बड़े मॉडल का हिस्सा है और सही नाम विशेषताओं को उत्पन्न नहीं करता है।

यदि आप संपादक टेम्पलेट्स के बजाय पार्टियल का उपयोग करने पर जोर देते हैं, तो मैं सुझाव देता हूं कि मॉडल को आंशिक रूप से पास कर दें, फिर प्रत्येक आंशिक मॉडल करें। जो भी हो। फू और यह बाध्यकारी के लिए सही नाम विशेषताओं को उत्पन्न करेगा।

9

आपको पार्टियल व्यू के फ़ील्ड में उपसर्ग जोड़ना चाहिए।यह डेटा को सही ढंग से बाध्य करने देगा।

बजाय:

@Html.Partial("_ReportOptions", Model.ReportOptions); 

उपयोग:

@Html.Partial("_ReportOptions", Model.ReportOptions, new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "ReportOptions" }}) 
1
@Html.Partial("_ReportOptions", Model.Contact, new ViewDataDictionary() 
      { 
       TemplateInfo = new TemplateInfo() 
        { 
         HtmlFieldPrefix = "Contact" 
        } 
      }) 

) 


@Html.Partial("_TransactionSearchFields", Model.SearchCriteria, new 
ViewDataDictionary() 
      { 
       TemplateInfo = new TemplateInfo() 
        { 
         HtmlFieldPrefix = "SearchCriteria" 
        } 
      }) 
संबंधित मुद्दे