c# - रेजर व्यू इंजन-मैं आंशिक दृश्य कैसे जोड़ सकता हूं




asp.net-mvc razor (2)

आप आंशिक रूप से एक संपादक टेम्पलेट की तरह दिखते हैं ताकि आप इसे इस तरह शामिल कर सकें (यह सुनिश्चित करना कि आपका आंशिक ~/views/controllername/EditorTemplates उपफोल्डर में रखा गया है):

@Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel)

या अगर यह मामला बस नहीं है:

@Html.Partial("nameOfPartial", Model)

मैं सोच रहा था कि, यदि यह संभव है, तो नए रेज़र व्यू इंजन का उपयोग करके आंशिक रूप से प्रस्तुत करने का सबसे अच्छा तरीका है। मैं समझता हूं कि यह ऐसा कुछ है जो उस समय तक पूरी तरह समाप्त नहीं हुआ था

अभी मैं उपयोगकर्ता नियंत्रण प्रस्तुत करने के लिए रेंडरपेज का उपयोग कर रहा हूं:

@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)

रेंडरपेज कॉल करने वाला पेज एक लेआउट (मास्टर) पृष्ठ का उपयोग करता है जिसमें तीन खंड परिभाषित किए गए हैं: टाइटलकंटेंट, हेडकंटेंट और मेनकंटेंट। जब मैं इस पृष्ठ से अपने लोकेल नियंत्रण को प्रस्तुत करने का प्रयास करता हूं तो ऐसा लगता है कि इन वर्गों की भी आवश्यकता है - उन्हें केवल कॉलिंग पेज में ही आवश्यकता होनी चाहिए और मौजूद हैं। मुझे निम्नलिखित संदेश प्राप्त होता है, भले ही मैं अपने आंशिक दृश्य में अनुभाग शामिल करता हूं या नहीं (जाहिर है कि मैं इन वर्गों को शामिल नहीं करना चाहता हूं लेकिन यह एक दिलचस्प डीबगिंग बिंदु की तरह लग रहा था ...)।

निम्नलिखित खंडों को परिभाषित किया गया है लेकिन लेआउट पेज '~ / Views / Shared / LocaleUserControl.cshtml' पर प्रस्तुत नहीं किया गया है: TitleContent; HeadContent; मुख्य सामग्री

मेरा आंशिक दृश्य निम्नानुसार है (निम्न link से अनुकूलित):

@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel>
@using System.Web.UI;

<p>
     @Html.LabelFor(model => Model.CountryName)
    <br />
    @Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"})
</p>
<p>
     @Html.LabelFor(model => Model.StateProvince)
    <br />
     @Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" })
</p>


<script type="text/javascript">
    $(function () {
        var countries = $("#CountryName");
        var statesprovinces = $("#StateProvince");
        countries.change(function () {
            statesprovinces.find('option').remove();
            var url = '@Url.Action("GetStatesProvinces", "Base")';
            $.getJSON(url, { countryId: countries.val() }, function (data) {
                $(data).each(function () {
                    $("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces);
                });
            });
        });
    });
</script>

यदि आप कोड को डुप्लिकेट नहीं करना चाहते हैं, और मेरे जैसे आप आंकड़े दिखाना चाहते हैं, तो अपने दृश्य मॉडल में, आप केवल उन मॉडल में पास कर सकते हैं जिन्हें आप डेटा प्राप्त करना चाहते हैं:

public class GameViewModel
{
    public virtual Ship Ship { get; set; }
    public virtual GamePlayer GamePlayer { get; set; }     
}

फिर, अपने नियंत्रक में अपने संबंधित मॉडल पर अपने प्रश्नों को चलाएं, उन्हें दृश्य मॉडल में पास करें और इसे वापस करें, उदाहरण:

GameViewModel PlayerStats = new GameViewModel();

GamePlayer currentPlayer = (from c in db.GamePlayer [more queries]).FirstOrDefault();

[परिणाम देखने के लिए कोड]

//pass current player into custom view model
PlayerStats.GamePlayer = currentPlayer;

जैसे मैंने कहा, आपको केवल यह करना चाहिए यदि आप प्रासंगिक तालिकाओं से आंकड़े प्रदर्शित करना चाहते हैं, और सीआरयूडी प्रक्रिया का कोई अन्य हिस्सा नहीं है, अन्य कारणों से ऊपर बताए गए सुरक्षा कारणों से।





razor