ASP.NET MVC में एक आंशिक दृश्य में पैरामीटर कैसे पास करें?


93

मान लीजिए कि मेरा यह आंशिक दृष्टिकोण है:

Your name is <strong>@firstName @lastName</strong>

जो केवल एक बच्चे के माध्यम से सुलभ है जैसे:

[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{

}

और मैं इस आंशिक दृश्य का उपयोग किसी अन्य दृश्य के साथ करना चाहता हूं:

@Html.RenderPartial("FullName")

दूसरे शब्दों में, मैं पहले नाम को एन्स लास्टनेम से आंशिक रूप से देखने में सक्षम होना चाहता हूं। मैं कैसे करूं?


बहुत ही करीबी से संबंधित प्रश्न: stackoverflow.com/questions/1909134/…
क्रिस मोशिनिनी

जवाबों:


77

इस अधिभार का उपयोग करें ( RenderPartialExtensions.RenderPartialMSDN पर ):

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)

इसलिए:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}

1
ठीक है, कि कोशिश की, लेकिन मुझे 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)' के लिए सबसे अच्छा अतिभारित विधि मिलान मिल रहा है । कुछ अमान्य तर्क त्रुटियां हैं। मुझे नियंत्रक विधि कैसे लागू करनी चाहिए? क्या इसमें इनपुट पैरामीटर होना चाहिए?
सईद नेमाटी

18
तो आप इस तरह से पैरामीटर पारित करते हैं, आप इसे आंशिक दृश्य में कैसे एक्सेस करते हैं?
बुर्जुआ

9
आपको कोष्ठक की भी आवश्यकता नहीं है। @Html.Partial()के रूप में ही है, @{Html.RenderPartial();}लेकिन बहुत सुंदर है। उनके पास समान अधिभार भी हैं।
18

7
आप ऑब्जेक्ट को कैसे एक्सेस करते हैं? Model.firstNameऔर उनके जैसे एक अपवाद को फेंक देते हैं किobject doesn't have a 'firstName' property
राख

4
@ ashes999 आप ViewData के माध्यम से उपयोग कर सकते हैं ... लेकिन बस अपने उपयोग के लिए विशिष्ट मॉडल बनाकर चीजों को चुस्त रखने में मदद करें। एक बार इसका उपयोग करें और कुछ इसे टॉस अप मान सकते हैं, लेकिन इसे इससे अधिक बार उपयोग करें और यह नो-ब्रेनर है।
टेड

83

यदि आप ViewData का उपयोग करना चाहते हैं, तो यह करने का एक और तरीका है:

@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })

और पारित मूल्यों को प्राप्त करने के लिए:

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}

धन्यवाद, आपके जवाब ने इस के लिए एक मॉडल बनाने के बिना चाल चली।
अल्वारोड्स

सभी उदाहरणों में से, यह एकमात्र ऐसा है जो पूरी तरह से मेरे लिए काम करता है। धन्यवाद
BrianLegg

यह वही है जिसकी मुझे तलाश थी, कोई मॉडल नहीं। धन्यवाद :)
अनुपम रॉय

उत्कृष्ट उत्तर - लेकिन MVC 4 के साथ Html.RenderPartial का उपयोग Html.Partial के बजाय करें
ग्राहम नाइट

24

आपको एक व्यू मॉडल बनाने की जरूरत है। कुछ ऐसा करना चाहिए ...

public class FullNameViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     public FullNameViewModel() { } 

     public FullNameViewModel(string firstName, string lastName)
     {
          this.FirstName = firstName;
          this.LastName = lastName;
     }

}

फिर अपने एक्शन रिजल्ट से मॉडल पास करें

return View("FullName", new FullNameViewModel("John", "Doe"));

और आप का उपयोग करने में सक्षम हो जाएगा @Model.FirstNameऔर @Model.LastNameतदनुसार।


13

सुनिश्चित करें कि आप Html.RenderPartial के आसपास {} जोड़ें, जैसे:

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}

नहीं

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});

1
आपके आंशिक दृश्य की परिभाषा कैसी दिखती है? @Model घोषणा क्या है? इसका अनाम ...
एलिजाबेथ

हाँ जोड़ना सुनिश्चित करें { }, मैंने समय बर्बाद किया जब तक कि मुझे यह लेख नहीं मिला
shaijut

4

निम्नलिखित मेरे लिए डॉटनेट 1.0.1 पर काम कर रहा है :

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi‌​ewData) {
    {
      "hi", "hello" 
    } 
  }
);

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.