রেজার ভিউ ইঞ্জিন - আমি কীভাবে আংশিক দর্শন যোগ করতে পারি


84

আমি ভাবছিলাম যে, যদি সম্ভব হয় তবে নতুন রেজার ভিউ ইঞ্জিন ব্যবহার করে আংশিক রেন্ডার করার সেরা উপায় way আমি বুঝতে পারি এটি এমন একটি বিষয় যা পুরোপুরি শেষ হয়নি

এখনই আমি ব্যবহারকারীর নিয়ন্ত্রণ রেন্ডার করতে রেন্ডারপেজ ব্যবহার করছি:

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

রেন্ডারপেজ কলকারী পৃষ্ঠাটি তিনটি বিভাগ সংজ্ঞায়িত করে একটি বিন্যাস (মাস্টার) পৃষ্ঠা ব্যবহার করে: টাইটেলকন্ট, হেডকন্টেন্ট এবং মেইনকন্টেন্ট। আমি যখন এই পৃষ্ঠা থেকে আমার স্থানীয় নিয়ন্ত্রণ রেন্ডার করার চেষ্টা করি তখন দেখা যায় যে এই বিভাগগুলিও প্রয়োজনীয় - সেগুলি কেবল কলিং পৃষ্ঠায় প্রয়োজন হবে এবং উপস্থিত থাকবে। আমি আমার আংশিক দৃষ্টিভঙ্গিতে বিভাগগুলি অন্তর্ভুক্ত করি বা না করুক না কেন আমি নিম্নলিখিত বার্তাটি পেয়েছি (স্পষ্টতই আমি এই বিভাগগুলি অন্তর্ভুক্ত করতে চাই না তবে এটি একটি আকর্ষণীয় ডিবাগিং পয়েন্টের মতো মনে হয়েছিল ...)।

নিম্নলিখিত বিভাগগুলি সংজ্ঞায়িত করা হয়েছে তবে লেআউট পৃষ্ঠায় '~ / ভিউ / ভাগ / স্থানীয় / ব্যবহারকারীকন্ট্রোল.একটিএমটিএল' রেন্ডার করা হয়নি: টাইটেলকন্ট; হেডকন্টেন্ট; মূল

আমার আংশিক দৃষ্টিভঙ্গি নীচে দেওয়া হয়েছে (নিম্নলিখিত লিঙ্ক থেকে অভিযোজিত ):

@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>

উত্তর:


125

আপনি আংশিক দেখতে এডিটর টেম্পলেটটির মতো দেখেন যাতে আপনি এটিকে অন্তর্ভুক্ত করতে পারেন (অবশ্যই অনুমান করে যে আপনার আংশিক ~/views/controllername/EditorTemplatesসাবফোল্ডারে স্থাপন করা হয়েছে ):

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

বা যদি এটি সহজভাবে না হয়:

@Html.Partial("nameOfPartial", Model)

প্রতিক্রিয়াটির জন্য ধন্যবাদ ... এইচটিএমএল.এডিটরটির জন্য এই উদাহরণটি একটি ভাল ধারণা হতে পারে - তবে আমি বিকল্পগুলি দেখতে আগ্রহী হব কারণ আরও জটিল উদাহরণগুলির ক্ষেত্রে এটি নয় - আমি অবশ্যই খুব শীঘ্রই এটিকে আবার শুরু করব। এইচটিএমএল. পার্টিয়াল কাজ করবে না কারণ এটি অবশ্যই ভিউপেজ বা ভিউউজারকন্ট্রোল থেকে প্রাপ্ত হবে যখন রেজার আংশিক ওয়েবভিউপেজ থেকে প্রাপ্ত ...
জেপি।

4
এইচটিএমএল. পার্টিয়াল পুরোপুরি সূক্ষ্মভাবে কাজ করে। ভিসুয়াল স্টুডিও একটি নতুন ASP.NET MVC 3 প্রকল্পের রাজো দৃশ্য ইঞ্জিন ব্যবহার করা শুরু করুন, খুলুন _Layout.cshtml ফাইল Sharedফোল্ডার এবং চেকআউট কিভাবে অন্তর্ভুক্তি _LogOnPartial.cshtmlযা থেকে আহরিত WebViewPageসম্পন্ন করা হয় (Html.Partial ব্যবহার করে)। সুতরাং না, আংশিকটির কাজ করার জন্য ViewPageবা এগুলি আদৌ নেওয়া উচিত নয় । ViewUserControlHtml.Partial
দারিন দিমিত্রভ 16

4
হুঁ, মনে হচ্ছে আপনি ঠিক আছেন। দেখে মনে হচ্ছে যে আমি কিছুটা ডিবাগিং করতে পেরেছি। ধন্যবাদ!
জেপি।

4
আমি Html.RenderPartialএএসপিএক্স পৃষ্ঠাটি ব্যবহার করতাম, যা বাতিল হয়ে যায়। Html.Partialফেরত একটি MvcHtmlString। সুতরাং, যদি আপনার আংশিকটিতে প্রচুর মার্কআপ থাকে তবে আপনি কেবলমাত্র জিসি এটির জন্য একটি খুব বড় স্ট্রিং অবজেক্ট তৈরি করতে পারেন। এমন কোন পদ্ধতির সাহায্যে যা রেজার ব্যবহার করে সরাসরি আউটপুট সরবরাহ করতে সহায়তা করে?
ড্রয় নোকস

4
@ ড্র আমি মনে করি রেন্ডার পার্টিয়ালকে একটি @{...}ব্লকে মোড়ানো কাজ করা উচিত। এর থেকে আরও ভাল সমাধান হলে কোনও ধারণা নেই।
কোডসইনচায়োস

0

আপনি যদি কোডটি সদৃশ করতে চান না, এবং আমার মতো আপনি কেবল পরিসংখ্যান প্রদর্শন করতে চান, আপনার ভিউ মডেলে, আপনি কেবল এমন মডেলগুলিতে পাস করতে পারেন যাতে আপনি পছন্দ করতে চান:

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;

যেমনটি আমি বলেছিলাম, আপনি কেবল তখনই এটি করা উচিত যদি আপনি প্রাসঙ্গিক টেবিলগুলি থেকে পরিসংখ্যান প্রদর্শন করতে চান এবং সুরক্ষা কারণে অন্যান্য ব্যক্তিরা উপরে বর্ণিত সুরক্ষার কারণে সিআরইউডি প্রক্রিয়াটির কোনও অংশই ঘটছে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.