রেজার ভিউ ইঞ্জিন সহ আংশিক দর্শন এএসপি.এনইটি এমভিসি 3 থেকে নির্দিষ্ট বিভাগগুলিতে সামগ্রী ইনজেকশন করা হচ্ছে


324

আমি এই বিভাগটি আমার মধ্যে সংজ্ঞায়িত করেছি _Layout.cshtml

@RenderSection("Scripts", false)

আমি এটি সহজেই একটি দর্শন থেকে ব্যবহার করতে পারি:

@section Scripts { 
    @*Stuff comes here*@
}

আমি যার সাথে লড়াই করছি তা হ'ল আংশিক দৃষ্টিভঙ্গি থেকে এই বিভাগের অভ্যন্তরে কিছু সামগ্রী কীভাবে .ুকানো যায়।

আসুন ধরে নেওয়া যাক এটি আমার দেখার পৃষ্ঠা:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>

আংশিক দৃষ্টিভঙ্গি Scriptsথেকে বিভাগটির অভ্যন্তরে আমার কিছু সামগ্রী ইনজেক্ট করতে হবে _myPartial

কিভাবে আমি এটি করতে পারব?


17
যে কারও পরে এটি আসার জন্য - এটি হ্যান্ডেল করার জন্য একটি নুগেট প্যাকেজ রয়েছে: nuget.org/packages/ Forloop.Html সহায়তা
রাশ ক্যাম

@ রাসক্যাম আপনার এই প্রশ্নের উত্তর দেওয়া উচিত। +1 নুগেট প্যাকেজটি ওপির সঠিক সমস্যাটি সমাধান করে।
ক্যারি কেন্ডাল

1
@ রুসক্যাম নিউগেট প্যাকেজটি কোনও সমাধান নয়, প্যাকেজের কোড হতে পারে।
মাকসিম ভি।

8
@MaksimVi। ভাল, আমি nuget প্যাকেজ লিখেছিলেন এবং এটা, তাই বদলে পুনরাবৃত্তি কোড (নিচে গ্রহণের কোন উদ্দেশ্য আছে bitbucket.org/forloop/forloop-htmlhelpers/src () বা উইকি bitbucket.org/forloop/forloop-htmlhelpers/wiki / হোম ) এখানে, মন্তব্য হিসাবে এটির একটি লিঙ্কটি স্ট্যাকওভারফ্লো, আইএমওর মধ্যে রয়েছে within
রাশ ক্যাম

: এখানে আরেকটি সমাধান খুব সুন্দর মনে হচ্ছে stackoverflow.com/questions/5355427/...
jkokorian

উত্তর:


235

বিভাগগুলি আংশিক দৃষ্টিভঙ্গিতে কাজ করে না এবং এটি নকশা দ্বারা। অনুরূপ আচরণ অর্জন করতে আপনি কিছু কাস্টম সহায়ক ব্যবহার করতে পারেন , তবে সত্যই এটি প্রয়োজনীয় স্ক্রিপ্টগুলি অন্তর্ভুক্ত করার জন্য দৃষ্টিভঙ্গির দায়িত্ব, আংশিক দায়িত্ব নয়। আমি এটি করার জন্য প্রধান দৃশ্যের @ স্ক্রিপ্টস বিভাগটি ব্যবহার করার পরামর্শ দিচ্ছি এবং স্ক্রিপ্টগুলির বিষয়ে পার্টিয়ালদের চিন্তিত না করে।


445
তবে স্ক্রিপ্টটি যদি আংশিকর সাথে খুব নির্দিষ্ট হয়? এটি আংশিক সংজ্ঞায়িত করার জন্য যৌক্তিক ধারণা তৈরি করে না, এবং দৃষ্টিতে নয়?
জেজ

43
কেন এটি নকশা দ্বারা?
শিমি ওয়েটজ্যান্ডলার

56
@ ডারিন: আমি একমত নই DRY নীতি সম্পর্কে কি? আমি নিজেকে পুনরাবৃত্তি করতে পছন্দ করি না, এমনকি যদি এটি কেবল স্ক্রিপ্টের উল্লেখই থাকে।
fretje

14
@ ফ্রেটজে, এই বিষয়ে সবার মতামত প্রকাশের অধিকার রয়েছে। আমি আপনার শ্রদ্ধা। আমার উত্তরে আমি আমার প্রকাশ করেছি এবং একটি উত্তরের সাথে লিঙ্ক করেছি যা আপনাকে এই কাজটি অর্জন করতে দেয়। তবে আমি এই পরিস্থিতির জন্য আমি কী সুপারিশ করব এবং কী করব সে সম্পর্কেও আমি হাইলাইট করেছি।
দারিন দিমিত্রভ

33
@ জোশনি এবং বাকী দ্বিতীয়টি - একটি "উইজেট" (প্রদর্শন + সমৃদ্ধ মিথস্ক্রিয়া) সম্পর্কিত জাভাস্ক্রিপ্টের সাথে দৃled়ভাবে মিলিত একটি আংশিক দর্শনের একটি নিখুঁত উদাহরণ। সম্পূর্ণ কার্যকারিতা পাওয়ার জন্য ডিজাইনের মাধ্যমে আমার দুটি জায়গায় বিবৃতি অন্তর্ভুক্ত করার দরকার নেই, কারণ প্রদর্শনী পরিচারক ইন্টারঅ্যাকশন ছাড়া কখনও হবে না এবং ইন্টারঅ্যাকশনটি অন্য কোথাও প্রদর্শিত হবে না।
ড্রাজাস

83

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

আমার মধ্যে _layout:

@RenderSection("body_scripts", false)

আমার indexদৃষ্টিতে আমার আছে:

@Html.Partial("Clients")
@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

আমার clientsদৃষ্টিতে আমার কাছে (সমস্ত মানচিত্র এবং সমিতি h এইচটিএমএল) রয়েছে:

@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

আমার Clients_Scriptsদর্শনটিতে জাভাস্ক্রিপ্টটি পৃষ্ঠাতে রেন্ডার করার জন্য রয়েছে

এইভাবে আমার স্ক্রিপ্টটি বিচ্ছিন্ন করা হয়েছে এবং যেখানে প্রয়োজন হবে সেই পৃষ্ঠাতে রেন্ডার করা যেতে পারে, body_scriptsট্যাগটি কেবল প্রথম ঘটনায়ই রেন্ডার করা হয় যা রেজার ভিউ ইঞ্জিন এটি সন্ধান করে।

এটি আমাকে সবকিছু আলাদা করতে দেয় - এটি এমন একটি সমাধান যা আমার পক্ষে বেশ ভালভাবে কাজ করে, অন্যদের সাথে এটিতে সমস্যা থাকতে পারে তবে এটি "ডিজাইনের মাধ্যমে" গর্তটিকে প্যাচ করে।


2
আপনাকে ভোট দেওয়ার মত আমি ছিলাম না, তবে আমি বলব যে আমি এই সমাধানটি সত্যিই পছন্দ করি না কারণ এটি এখনও নির্দিষ্ট স্ক্রিপ্টগুলি ভিউ থেকে আলাদা করে দেয়।
ক্রাশ করুন

3
আমার সাথে অন্য 20 জনের মতামত রয়েছে। আপনার কাছে এখনও পৃথক ফাইলে থাকা দৃশ্যের সাথে সরাসরি সম্পর্কিত স্ক্রিপ্ট থাকতে পারে, আপনি যদি নিজের ভিউ সহ আপনার স্ক্রিপ্টটি অন্তর্ভুক্ত না করেন তবে এটি প্রোগ্রামিং ত্রুটি। এটি একটি পৃথক ফাইলে থাকা উপস্থাপনা থেকে ইন্টারঅ্যাকশনকে পৃথক করে এবং পৃথক ফাইলে থাকা থেকে এটির অন্যান্য সুবিধার প্রচুর পরিমাণে অনুমতি দেয়।
ডান রিচার্ডসন

1
তুমি পুরোপুরি ঠিক আমি আসলে সম্পূর্ণভাবে একমত এবং ব্যক্তিগতভাবে এই পদ্ধতি পছন্দ। আমার আসল সমস্যাটি হ'ল আমার সহকর্মীরা এই বিচ্ছিন্নতার সাথে লড়াই করে। যদিও এটি একটি ডোমেন সমস্যা। আমি মনে করি এই পদ্ধতিটি আদর্শ, বিশেষত একবার আপনি জাভাস্ক্রিপ্ট বিল্ড প্রক্রিয়াতে ফ্যাক্টর হন। আমি আমার সহকর্মীদের এই পদ্ধতিটি ব্যবহারে শিক্ষিত করার কাজ চালিয়ে যাব এবং সম্পূর্ণ সমর্থন করব support যদিও আপনার উত্তরটি উন্নত হতে পারে বলে আমি মনে করি। যদিও আপনার "20 জন সম্মত হন" উল্লেখ করার দরকার নেই। একটি উত্তর জনপ্রিয় কারণ, সর্বদা এটি সঠিক নয় মানে না। এই ক্ষেত্রে এটি সঠিক।
পিষ্ট করুন

খুব সত্য, এবং আমি সবসময় গঠনমূলক প্রতিক্রিয়া গ্রহণ এবং আমার নিজের কোড এবং উত্তর পরিবর্তন যদি ছিল করা :) একটি উন্নতি হয় খুশি
ড্যান রিচার্ডসন

1
এই সমাধানটি এমভিসি-ইশ আইটেমের সমস্ত কিছু করতে সক্ষম হওয়ার অতিরিক্ত উপকারিতা রয়েছে যা আপনি আদর্শ ভিউতে করতে সক্ষম হবেন যেমন মডেলটিতে পাস করা জেএসওএনকে এনকোড করতে সক্ষম হবেন এবং ইউআরএল ব্যবহার করে ইউআরএল তৈরি করতে পারবেন। কর্ম. আপনার অ্যাংুলারজেএস কন্ট্রোলারগুলি সেটআপ করার জন্য এই পদ্ধতিরটি একটি মার্জিত উপায় - প্রতিটি আংশিক দর্শন কৌণিক মডিউলটিতে একটি পৃথক নিয়ামককে উপস্থাপন করতে পারে। এত পরিষ্কার!
ড্যান

40

এই থ্রেডের সমাধানগুলি থেকে আমি নিম্নলিখিত সম্ভবত অতিরিক্ত সমাধানের সমাধান নিয়ে এসেছি যা আপনাকে ব্যবহারের ব্লকের মধ্যে কোনও HTML (স্ক্রিপ্টগুলি) সরবরাহ করতে বিলম্ব করতে দেয়।

, USAGE

"বিভাগ" তৈরি করুন

  1. সাধারণ দৃশ্য: আংশিক দৃশ্যে, কেবলমাত্র একবারে ব্লকটি অন্তর্ভুক্ত করুন পাতায় আংশিক দৃশ্যের কতবার পুনরাবৃত্তি করা যায় তা নয়:

    @using (Html.Delayed(isOnlyOne: "some unique name for this section")) {
        <script>
            someInlineScript();
        </script>
    }
    
  2. আংশিক দৃশ্যে, প্রতিবার আংশিক ব্যবহৃত হওয়ার জন্য ব্লকটি অন্তর্ভুক্ত করুন:

    @using (Html.Delayed()) {
        <b>show me multiple times, @Model.Whatever</b>
    }
    
  3. আংশিক দৃষ্টিতে কেবলমাত্র একবারে ব্লকটি অন্তর্ভুক্ত করুন আংশিকতাটি কতবার পুনরাবৃত্তি হয় তা নয়, তবে পরে এটি বিশেষভাবে নাম দ্বারা রেন্ডার করুন when-i-call-you:

    @using (Html.Delayed("when-i-call-you", isOnlyOne: "different unique name")) {
        <b>show me once by name</b>
        <span>@Model.First().Value</span>
    }
    

"বিভাগগুলি" রেন্ডার করুন

(অর্থাত্ পিতামাতার দৃশ্যে বিলম্বিত বিভাগটি প্রদর্শন করুন)

@Html.RenderDelayed(); // writes unnamed sections (#1 and #2, excluding #3)
@Html.RenderDelayed("when-i-call-you", false); // writes the specified block, and ignore the `isOnlyOne` setting so we can dump it again
@Html.RenderDelayed("when-i-call-you"); // render the specified block by name
@Html.RenderDelayed("when-i-call-you"); // since it was "popped" in the last call, won't render anything due to `isOnlyOne` provided in `Html.Delayed`

কোড

public static class HtmlRenderExtensions {

    /// <summary>
    /// Delegate script/resource/etc injection until the end of the page
    /// <para>@via https://stackoverflow.com/a/14127332/1037948 and http://jadnb.wordpress.com/2011/02/16/rendering-scripts-from-partial-views-at-the-end-in-mvc/ </para>
    /// </summary>
    private class DelayedInjectionBlock : IDisposable {
        /// <summary>
        /// Unique internal storage key
        /// </summary>
        private const string CACHE_KEY = "DCCF8C78-2E36-4567-B0CF-FE052ACCE309"; // "DelayedInjectionBlocks";

        /// <summary>
        /// Internal storage identifier for remembering unique/isOnlyOne items
        /// </summary>
        private const string UNIQUE_IDENTIFIER_KEY = CACHE_KEY;

        /// <summary>
        /// What to use as internal storage identifier if no identifier provided (since we can't use null as key)
        /// </summary>
        private const string EMPTY_IDENTIFIER = "";

        /// <summary>
        /// Retrieve a context-aware list of cached output delegates from the given helper; uses the helper's context rather than singleton HttpContext.Current.Items
        /// </summary>
        /// <param name="helper">the helper from which we use the context</param>
        /// <param name="identifier">optional unique sub-identifier for a given injection block</param>
        /// <returns>list of delayed-execution callbacks to render internal content</returns>
        public static Queue<string> GetQueue(HtmlHelper helper, string identifier = null) {
            return _GetOrSet(helper, new Queue<string>(), identifier ?? EMPTY_IDENTIFIER);
        }

        /// <summary>
        /// Retrieve a context-aware list of cached output delegates from the given helper; uses the helper's context rather than singleton HttpContext.Current.Items
        /// </summary>
        /// <param name="helper">the helper from which we use the context</param>
        /// <param name="defaultValue">the default value to return if the cached item isn't found or isn't the expected type; can also be used to set with an arbitrary value</param>
        /// <param name="identifier">optional unique sub-identifier for a given injection block</param>
        /// <returns>list of delayed-execution callbacks to render internal content</returns>
        private static T _GetOrSet<T>(HtmlHelper helper, T defaultValue, string identifier = EMPTY_IDENTIFIER) where T : class {
            var storage = GetStorage(helper);

            // return the stored item, or set it if it does not exist
            return (T) (storage.ContainsKey(identifier) ? storage[identifier] : (storage[identifier] = defaultValue));
        }

        /// <summary>
        /// Get the storage, but if it doesn't exist or isn't the expected type, then create a new "bucket"
        /// </summary>
        /// <param name="helper"></param>
        /// <returns></returns>
        public static Dictionary<string, object> GetStorage(HtmlHelper helper) {
            var storage = helper.ViewContext.HttpContext.Items[CACHE_KEY] as Dictionary<string, object>;
            if (storage == null) helper.ViewContext.HttpContext.Items[CACHE_KEY] = (storage = new Dictionary<string, object>());
            return storage;
        }


        private readonly HtmlHelper helper;
        private readonly string identifier;
        private readonly string isOnlyOne;

        /// <summary>
        /// Create a new using block from the given helper (used for trapping appropriate context)
        /// </summary>
        /// <param name="helper">the helper from which we use the context</param>
        /// <param name="identifier">optional unique identifier to specify one or many injection blocks</param>
        /// <param name="isOnlyOne">extra identifier used to ensure that this item is only added once; if provided, content should only appear once in the page (i.e. only the first block called for this identifier is used)</param>
        public DelayedInjectionBlock(HtmlHelper helper, string identifier = null, string isOnlyOne = null) {
            this.helper = helper;

            // start a new writing context
            ((WebViewPage)this.helper.ViewDataContainer).OutputStack.Push(new StringWriter());

            this.identifier = identifier ?? EMPTY_IDENTIFIER;
            this.isOnlyOne = isOnlyOne;
        }

        /// <summary>
        /// Append the internal content to the context's cached list of output delegates
        /// </summary>
        public void Dispose() {
            // render the internal content of the injection block helper
            // make sure to pop from the stack rather than just render from the Writer
            // so it will remove it from regular rendering
            var content = ((WebViewPage)this.helper.ViewDataContainer).OutputStack;
            var renderedContent = content.Count == 0 ? string.Empty : content.Pop().ToString();
            // if we only want one, remove the existing
            var queue = GetQueue(this.helper, this.identifier);

            // get the index of the existing item from the alternate storage
            var existingIdentifiers = _GetOrSet(this.helper, new Dictionary<string, int>(), UNIQUE_IDENTIFIER_KEY);

            // only save the result if this isn't meant to be unique, or
            // if it's supposed to be unique and we haven't encountered this identifier before
            if( null == this.isOnlyOne || !existingIdentifiers.ContainsKey(this.isOnlyOne) ) {
                // remove the new writing context we created for this block
                // and save the output to the queue for later
                queue.Enqueue(renderedContent);

                // only remember this if supposed to
                if(null != this.isOnlyOne) existingIdentifiers[this.isOnlyOne] = queue.Count; // save the index, so we could remove it directly (if we want to use the last instance of the block rather than the first)
            }
        }
    }


    /// <summary>
    /// <para>Start a delayed-execution block of output -- this will be rendered/printed on the next call to <see cref="RenderDelayed"/>.</para>
    /// <para>
    /// <example>
    /// Print once in "default block" (usually rendered at end via <code>@Html.RenderDelayed()</code>).  Code:
    /// <code>
    /// @using (Html.Delayed()) {
    ///     <b>show at later</b>
    ///     <span>@Model.Name</span>
    ///     etc
    /// }
    /// </code>
    /// </example>
    /// </para>
    /// <para>
    /// <example>
    /// Print once (i.e. if within a looped partial), using identified block via <code>@Html.RenderDelayed("one-time")</code>.  Code:
    /// <code>
    /// @using (Html.Delayed("one-time", isOnlyOne: "one-time")) {
    ///     <b>show me once</b>
    ///     <span>@Model.First().Value</span>
    /// }
    /// </code>
    /// </example>
    /// </para>
    /// </summary>
    /// <param name="helper">the helper from which we use the context</param>
    /// <param name="injectionBlockId">optional unique identifier to specify one or many injection blocks</param>
    /// <param name="isOnlyOne">extra identifier used to ensure that this item is only added once; if provided, content should only appear once in the page (i.e. only the first block called for this identifier is used)</param>
    /// <returns>using block to wrap delayed output</returns>
    public static IDisposable Delayed(this HtmlHelper helper, string injectionBlockId = null, string isOnlyOne = null) {
        return new DelayedInjectionBlock(helper, injectionBlockId, isOnlyOne);
    }

    /// <summary>
    /// Render all queued output blocks injected via <see cref="Delayed"/>.
    /// <para>
    /// <example>
    /// Print all delayed blocks using default identifier (i.e. not provided)
    /// <code>
    /// @using (Html.Delayed()) {
    ///     <b>show me later</b>
    ///     <span>@Model.Name</span>
    ///     etc
    /// }
    /// </code>
    /// -- then later --
    /// <code>
    /// @using (Html.Delayed()) {
    ///     <b>more for later</b>
    ///     etc
    /// }
    /// </code>
    /// -- then later --
    /// <code>
    /// @Html.RenderDelayed() // will print both delayed blocks
    /// </code>
    /// </example>
    /// </para>
    /// <para>
    /// <example>
    /// Allow multiple repetitions of rendered blocks, using same <code>@Html.Delayed()...</code> as before.  Code:
    /// <code>
    /// @Html.RenderDelayed(removeAfterRendering: false); /* will print */
    /// @Html.RenderDelayed() /* will print again because not removed before */
    /// </code>
    /// </example>
    /// </para>

    /// </summary>
    /// <param name="helper">the helper from which we use the context</param>
    /// <param name="injectionBlockId">optional unique identifier to specify one or many injection blocks</param>
    /// <param name="removeAfterRendering">only render this once</param>
    /// <returns>rendered output content</returns>
    public static MvcHtmlString RenderDelayed(this HtmlHelper helper, string injectionBlockId = null, bool removeAfterRendering = true) {
        var stack = DelayedInjectionBlock.GetQueue(helper, injectionBlockId);

        if( removeAfterRendering ) {
            var sb = new StringBuilder(
#if DEBUG
                string.Format("<!-- delayed-block: {0} -->", injectionBlockId)
#endif
                );
            // .count faster than .any
            while (stack.Count > 0) {
                sb.AppendLine(stack.Dequeue());
            }
            return MvcHtmlString.Create(sb.ToString());
        } 

        return MvcHtmlString.Create(
#if DEBUG
                string.Format("<!-- delayed-block: {0} -->", injectionBlockId) + 
#endif
            string.Join(Environment.NewLine, stack));
    }


}

1
বাহ কোডটি বুঝতে আমার পক্ষে এমনকি জটিল, তবে একটি সমাধান নিয়ে আসার জন্য +1
রমিজ আহমেদ সায়াদ

@ রমিজ আহমেদসায়াদ আপনি ঠিক বলেছেন - এখানে ফিরে আসার পরেও আমি কীভাবে এটি ব্যবহার করব তা বলতে কী বোঝাতে চাইছিলাম তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি। উত্তরটি আপডেট করা হচ্ছে ...
ড্রজাউস

এবং আরও স্পষ্ট করে বলা - দুটি "নাম" থাকার কারণটি হ'ল যদি আপনি কেবলমাত্র প্যারামিটারে অনন্য কীটির প্রয়োজন হলে এটি রেন্ডার isOnlyOneকরতে চান তবে কেবল আপনি যদি নাম অনুসারে নির্দিষ্ট স্থানে এটি রেন্ডার করতে চান তবে আপনি সনাক্তকারী সরবরাহ করেন, অন্যথায় এটি ফেলে দেওয়া হয় Html.RenderDelayed()
ড্রাগজা

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

@Transcendent "বিতর্ক" ইতিমধ্যেই গৃহীত উত্তর মন্তব্যের শুরু হয়েছে stackoverflow.com/a/7556594/1037948
drzaus

16

আমার এই সমস্যা ছিল এবং এই কৌশলটি ব্যবহার করেছি ।

এটি সবচেয়ে ভাল সমাধান আমি খুঁজে পেয়েছি যা খুব নমনীয়।

এছাড়াও ক্রমহীন বিভাগ ঘোষণার জন্য সমর্থন যোগ করতে দয়া করে এখানে ভোট দিন


9

আপনার যদি একটি jsথেকে কিছু চালানোর বৈধ প্রয়োজন হয় তবে partialআপনি এটি কীভাবে করতে পারেন তা jQueryএখানে প্রয়োজনীয় required

<script type="text/javascript">        
    function scriptToExecute()
    {
        //The script you want to execute when page is ready.           
    }

    function runWhenReady()
    {
        if (window.$)
            scriptToExecute();                                   
        else
            setTimeout(runWhenReady, 100);
    }
    runWhenReady();
</script>

আমি @ ড্রজাউস চেষ্টা করেছিলাম, এর জন্য 'সিআইফ্রিডি' দরকার বা এটি কার্যকর হয় না।
কচো সান্তা

8

অনুসরণ করছেন বিচক্ষণ নীতি, এটা বেশ "_myPartial" জন্য উদ্বুদ্ধ বিষয়বস্তু সরাসরি স্ক্রিপ্ট বিভাগে প্রয়োজনীয় না। আপনি সেই আংশিক দৃশ্য স্ক্রিপ্টগুলি পৃথক .jsফাইলে যুক্ত করতে পারেন এবং তাদের পিতামাতার দর্শন থেকে @ স্ক্রিপ্ট বিভাগে উল্লেখ করতে পারেন।


10
আংশিক দৃষ্টিভঙ্গি যদি পৃষ্ঠাটিতে রেন্ডার না করা হয় তবে কী হবে? আমরা কি এখনও পিতামাতার মধ্যে .js ফাইলগুলি রেফারেন্স করি এবং এটিকে ওভারলোড করি?
মুরালি মুরুজেসন

5

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

আমি এএমডি প্যাটার্নটি ব্যবহার করার পরামর্শ দেব (আমি নিজেও প্রয়োজনীয় জেএস পছন্দ করি )। আপনার জাভাস্ক্রিপ্টটি মডিউলগুলিতে আলাদা করুন, আপনার কার্যকারিতাটি সংজ্ঞায়িত করুন এবং জাভাস্ক্রিপ্টটি লোড করার জন্য ভিউয়ের উপর নির্ভর করার পরিবর্তে জাভাস্ক্রিপ্ট থেকে আপনার এইচটিএমএল এ হুক করুন। এটি আপনার কোড পরিষ্কার করবে, আপনার উদ্বেগগুলি পৃথক করবে এবং জীবনকে এক ঝাঁকুনির মধ্যে দিয়ে সহজ করে দেবে।


দুই বা তিন মাস বা তার মতো জন্য, আমি RequireJS ব্যবহার করছি এবং আমি মনে করি না যে আমি কখনও প্রয়োজনের জেএস ছাড়া আর কোনও ওয়েব অ্যাপ্লিকেশন বিকাশ করব।
tugberk

6
জাভাস্ক্রিপ্ট পাশাপাশি দেখার দায়িত্বও হতে পারে।
কেলম্যান

1
এএমডি প্যাটার্নটি ব্যবহার করা ভাল ধারণা, তবে জাভাস্ক্রিপ্ট মডেলের অংশ বলে আমি আপনার এই দাবির সাথে একমত নই। এটি প্রায়শই দেখুন আচরণের সংজ্ঞা দেওয়া হয়, বিশেষত যখন নকআউটের মতো কোনও কিছুর সাথে মিলিত হয়। আপনি আপনার জাভাস্ক্রিপ্ট ভিউতে আপনার মডেলের একটি JSON উপস্থাপনা ফেলে দিন। ব্যক্তিগতভাবে, আমি কেবল ক্লোজারগুলি ব্যবহার করি, windowবস্তুর উপর একটি কাস্টম "নেমস্পেস" এবং কোনও পার্টির আগে লাইব্রেরি স্ক্রিপ্টগুলি অন্তর্ভুক্ত করি।
13:22

আমি মনে করি এখানে একটি ভুল বোঝাবুঝি আছে। বেশিরভাগ ওয়েব অ্যাপ্লিকেশন বিকাশ করার সময়, আমরা আসলে দুটি অ্যাপ্লিকেশন বিকাশ করি : একটি যা সার্ভারে চালিত হয় এবং একটি যা ক্লায়েন্টের উপরে চলে। সার্ভারের দৃষ্টিকোণ থেকে, আপনি ব্রাউজারে যা কিছু পাঠান তা হ'ল "ভিউ"। সেই অর্থে, জাভাস্ক্রিপ্ট দেখার একটি অংশ। ক্লায়েন্ট অ্যাপের দৃষ্টিকোণ থেকে, খাঁটি এইচটিএমএল হ'ল এবং জেএসএস এমন কোড যা সার্ভারের এমভিসি পদগুলিতে এম এবং সি এর সমান্তরাল হয়। আমি মনে করি এ কারণেই এখানে লোকেরা মতবিরোধ করছে।
দ্য এজেন্ট

3

ওপিটির লক্ষ্য হ'ল তিনি তার আংশিক দৃশ্যে ইনলাইন স্ক্রিপ্টগুলি সংজ্ঞায়িত করতে চান, যা আমি ধরে নিয়েছি যে এই স্ক্রিপ্টটি কেবলমাত্র আংশিক দৃশ্যের সাথে সুনির্দিষ্ট, এবং সেই ব্লকটি তার স্ক্রিপ্ট বিভাগে অন্তর্ভুক্ত করা উচিত।

আমি পেয়েছি যে সে আংশিক দৃষ্টিভঙ্গিটি স্বয়ংসম্পূর্ণ থাকতে চায়। কৌণিক ব্যবহার করার সময় ধারণাটি উপাদানগুলির অনুরূপ।

আমার উপায়টি হ'ল স্ক্রিপ্টগুলি আংশিক দর্শনের মতোই রাখা উচিত। আংশিক ভিউ কল করার সময় এখন সমস্যাটি হ'ল এটি অন্যান্য স্ক্রিপ্টগুলির আগে স্ক্রিপ্টটি কার্যকর করতে পারে (যা সাধারণত বিন্যাস পৃষ্ঠার নীচে যুক্ত করা হয়)। সেক্ষেত্রে আপনার কাছে অন্যান্য স্ক্রিপ্টগুলির জন্য কেবল আংশিক দেখুন স্ক্রিপ্টের অপেক্ষা রয়েছে। এই কাজ করার বিভিন্ন উপায় আছে। সবচেয়ে সহজতমটি, যা আমি আগে ব্যবহার করেছি, এটি একটি ইভেন্ট ব্যবহার করছে body

আমার লেআউটে, আমার নীচে এমন কিছু থাকবে:

// global scripts
<script src="js/jquery.min.js"></script>
// view scripts
@RenderSection("scripts", false)
// then finally trigger partial view scripts
<script>
  (function(){
    document.querySelector('body').dispatchEvent(new Event('scriptsLoaded'));
  })();
</script>

তারপরে আমার আংশিক দৃশ্যে (নীচে):

<script>
  (function(){
    document.querySelector('body').addEventListener('scriptsLoaded', function() {

      // .. do your thing here

    });
  })();
</script>

আরেকটি সমাধান হ'ল আপনার সমস্ত স্ক্রিপ্টগুলি ধাক্কা দেওয়ার জন্য একটি স্ট্যাক ব্যবহার করছে এবং শেষে প্রত্যেককে কল করুন। ইতিমধ্যে উল্লিখিত অন্যান্য সমাধান হ'ল প্রয়োজনীয় জেএস / এএমডি প্যাটার্ন, যা সত্যই ভাল কাজ করে।


2

আমি যে প্রথম সমাধানটির কথা ভাবতে পারি তা হ'ল ভিউব্যাগ ব্যবহার করা মানগুলি রেন্ডার করতে হবে store

আস্তে আস্তে আমি কখনই চেষ্টা করিনি যদি এই কাজটি আংশিক দৃষ্টিকোণ থেকে হয় তবে এটি ইমো হওয়া উচিত।


শুধু চেষ্টা করেছেন; দুঃখিতভাবে যে কাজ না (তৈরি করা একটি করে ViewBag.RenderScripts = new List<string>();প্রধান পৃষ্ঠার উপরের, তারপর বলা @Html.Partial("_CreateUpdatePartial",Model,ViewData), তারপর করা @section Scripts {@foreach (string script in ViewBag.RenderScripts) Scripts.Render(script); }}আংশিক দৃশ্য আমি দিলেন। @{ViewBag.RenderScripts = ViewBag.RenderScripts ?? new List<string>();ViewBag.RenderScripts.Add("~/bundles/jquery");}
JohnLBevan

2

আংশিক দৃষ্টিতে বিভাগগুলি ব্যবহার করার দরকার নেই।

আপনার আংশিক দৃশ্যে অন্তর্ভুক্ত করুন। এটি jQuery লোড হওয়ার পরে ফাংশনটি সম্পাদন করে। আপনি আপনার কোডের জন্য শর্ত শর্ত পরিবর্তন করতে পারেন।

<script type="text/javascript">    
var time = setInterval(function () {
    if (window.jQuery != undefined) {
        window.clearInterval(time);

        //Begin
        $(document).ready(function () {
           //....
        });
        //End
    };
}, 10); </script>

জুলিও স্প্যাডার


2

আপনি এই এক্সটেনশন পদ্ধতিগুলি ব্যবহার করতে পারেন :

namespace System.Web.Mvc.Html
{
    public static class PartialWithScript
    {
        public static void RenderPartialWithScript(this HtmlHelper htmlHelper, string partialViewName)
        {
            if (htmlHelper.ViewBag.ScriptPartials == null)
            {
                htmlHelper.ViewBag.ScriptPartials = new List<string>();
            }

            if (!htmlHelper.ViewBag.ScriptPartials.Contains(partialViewName))
            {
                htmlHelper.ViewBag.ScriptPartials.Add(partialViewName);
            }

            htmlHelper.ViewBag.ScriptPartialHtml = true;
            htmlHelper.RenderPartial(partialViewName);
        }

        public static void RenderPartialScripts(this HtmlHelper htmlHelper)
        {
            if (htmlHelper.ViewBag.ScriptPartials != null)
            {
                htmlHelper.ViewBag.ScriptPartialHtml = false;
                foreach (string partial in htmlHelper.ViewBag.ScriptPartials)
                {
                    htmlHelper.RenderPartial(partial);
                }
            }
        }
    }
}

এটি ব্যবহার করুন:

আংশিক উদাহরণ: (_MyPartial.cshtml) যদি এইচটিএমএল রাখুন, এবং অন্যটিতে জেএসএস রাখুন।

@if (ViewBag.ScriptPartialHtml ?? true)
    <p>I has htmls</p>
}
else {
    <script type="text/javascript">
        alert('I has javascripts');
    </script>
}

আপনার _আলআউট.সি.এস.টি.এম.এল বা আপনি যেখানেই পার্টিয়াল থেকে স্ক্রিপ্টগুলি রেন্ডার করতে চান সেখানে নিম্নলিখিতগুলি (একবার) রাখুন: এটি বর্তমান অবস্থানে সমস্ত পার্টিশনের জাভাস্ক্রিপ্ট কেবল রেন্ডার করবে।

@{ Html.RenderPartialScripts(); }

তারপরে আপনার আংশিকটি ব্যবহার করতে, সহজভাবে এটি করুন: এটি এই স্থানে কেবল এইচটিএমএল রেন্ডার করবে।

@{Html.RenderPartialWithScript("~/Views/MyController/_MyPartial.cshtml");}

1

আংশিক দর্শনে বিভাগগুলি সন্নিবেশ করার একটি উপায় রয়েছে, যদিও এটি সুন্দর নয় pretty প্যারেন্ট ভিউ থেকে আপনার দুটি ভেরিয়েবলের অ্যাক্সেস থাকা দরকার। যেহেতু আপনার আংশিক দৃশ্যের অংশটি সেই অংশটি তৈরি করা, তাই এই ভেরিয়েবলগুলি বোধ করা বোধগম্য।

আংশিক দৃশ্যে কোনও বিভাগটি সন্নিবেশ করানোর মতো দেখতে এখানে দেখুন:

@model KeyValuePair<WebPageBase, HtmlHelper>
@{
    Model.Key.DefineSection("SectionNameGoesHere", () =>
    {
        Model.Value.ViewContext.Writer.Write("Test");
    });
}

এবং পৃষ্ঠায় আংশিক দৃশ্য সন্নিবেশ করানো হচ্ছে ...

@Html.Partial(new KeyValuePair<WebPageBase, HtmlHelper>(this, Html))

আপনি কোনও ক্লাসে প্রোগ্রামিকভাবে কোনও বিভাগের বিষয়বস্তু সংজ্ঞায়িত করতে এই কৌশলটি ব্যবহার করতে পারেন।

উপভোগ করুন!


1
আপনি দয়া করে এবং একটি সম্পূর্ণ কাজ প্রকল্পের একটি লিঙ্ক করতে পারেন?
এহসান জার্গার এরশাদী

1

প্লুটো এর ধারণাটি সুন্দর উপায়ে:

CustomWebViewPage.cs:

    public abstract class CustomWebViewPage<TModel> : WebViewPage<TModel> {

    public IHtmlString PartialWithScripts(string partialViewName, object model) {
        return Html.Partial(partialViewName: partialViewName, model: model, viewData: new ViewDataDictionary { ["view"] = this, ["html"] = Html });
    }

    public void RenderScriptsInBasePage(HelperResult scripts) {
        var parentView = ViewBag.view as WebPageBase;
        var parentHtml = ViewBag.html as HtmlHelper;
        parentView.DefineSection("scripts", () => {
            parentHtml.ViewContext.Writer.Write(scripts.ToHtmlString());
        });
    }
}

দেখেছে \ web.config:

<pages pageBaseType="Web.Helpers.CustomWebViewPage">

দেখুন:

@PartialWithScripts("_BackendSearchForm")

আংশিক (_ ব্যাকএন্ডস অনুসন্ধানফর্ম.কোটিএমএল):

@{ RenderScriptsInBasePage(scripts()); }

@helper scripts() {
<script>
    //code will be rendered in a "scripts" section of the Layout page
</script>
}

লেআউট পৃষ্ঠা:

@RenderSection("scripts", required: false)

1

এটি আমার জন্য একই ফাইলটিতে আংশিক দেখার জন্য জাভাস্ক্রিপ্ট এবং এইচটিএমএলকে সহ-সনাক্ত করার অনুমতি দেওয়ার জন্য কাজ করেছিল। একই আংশিক ভিউ ফাইলে এইচটিএমএল এবং সম্পর্কিত অংশটি দেখতে চিন্তার প্রক্রিয়াতে সহায়তা করে।


"_MyPartialView.cshtml" নামে আংশিক দৃশ্য ব্যবহার করে এমন দৃশ্যে

<div>
    @Html.Partial("_MyPartialView",< model for partial view>,
            new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>

@section scripts{

    @Html.Partial("_MyPartialView",<model for partial view>, 
                  new ViewDataDictionary { { "Region", "ScriptSection" } })

 }

আংশিক দেখুন ফাইলের মধ্যে

@model SomeType

@{
    var region = ViewData["Region"] as string;
}

@if (region == "HTMLSection")
{


}

@if (region == "ScriptSection")
{
        <script type="text/javascript">
    </script">
}

0

আমি একে একে সম্পূর্ণ আলাদা রুট সমাধান করেছি (কারণ আমি তাড়াতাড়ি ছিলাম এবং একটি নতুন এইচটিএমএলহেল্পার বাস্তবায়ন করতে চাইনি):

আমি আমার আংশিক দৃষ্টিভঙ্গিটিকে একটি বড়-অন্যথায় বিবৃতিতে জড়িয়ে দিয়েছি:

@if ((bool)ViewData["ShouldRenderScripts"] == true){
// Scripts
}else{
// Html
}

তারপরে, আমি কাস্টম ভিউডাটা দিয়ে আংশিক দু'বার কল করেছি:

@Html.Partial("MyPartialView", Model, 
    new ViewDataDictionary { { "ShouldRenderScripts", false } })

@section scripts{
    @Html.Partial("MyPartialView", Model, 
        new ViewDataDictionary { { "ShouldRenderScripts", true } })
}

অবশ্যই পুরো ধারণাটি হ'ল আংশিক দৃষ্টিভঙ্গির ভোক্তার এটি জানা দরকার নেই যে এটির স্ক্রিপ্টগুলি অন্তর্ভুক্ত করতে হবে, এটাই সমস্যাটি? অন্যথায় আপনি যেমনটি বলতে পারেন ঠিক তেমন @Html.Partial("MyPartialViewScripts")
ড্যান রিচার্ডসন

না, ধারণাটি হ'ল এইচটিএমএল হিসাবে একই নথিতে স্ক্রিপ্টগুলি সংজ্ঞায়িত করার অনুমতি দেওয়া হয়েছে, তবে আমি সম্মত হই যে এটি আদর্শ নয়।
রিক লাভ

0

আমার একই রকম সমস্যা ছিল, যেখানে আমার নীচে একটি মাস্টার পৃষ্ঠা ছিল:

@section Scripts {
<script>
    $(document).ready(function () {
        ...
    });
</script>
}

...

@Html.Partial("_Charts", Model)

তবে আংশিক দৃষ্টিভঙ্গি স্ক্রিপ্ট বিভাগে কিছু জাভাস্ক্রিপ্টের উপর নির্ভরশীল। আমি JSON হিসাবে আংশিক ভিউ এনকোড করে এটি একটি জাভাস্ক্রিপ্ট ভেরিয়েবলে লোড করে এবং তারপরে একটি ডিভকে জনপ্রিয় করতে এটি ব্যবহার করে সমাধান করেছি, সুতরাং:

@{
    var partial = Html.Raw(Json.Encode(new { html = Html.Partial("_Charts", Model).ToString() }));
}

@section Scripts {
<script>
    $(document).ready(function () {
        ...
        var partial = @partial;
        $('#partial').html(partial.html);
    });
</script>
}

<div id="partial"></div>

আপনার জেএসকে একটি পৃথক ফাইলে স্থানান্তরিত করে আইএমওর সমাধান করা উচিত ছিল।
মূল্যবান 7

0

পছন্দসইভাবে, আপনি কোনও ফোল্ডার / সূচকপ্রেসটিএমএলকে মাস্টারপেজ হিসাবে ব্যবহার করতে পারেন তারপরে বিভাগের স্ক্রিপ্টগুলি যুক্ত করতে পারেন। তারপরে, আপনার লেআউটে আপনার রয়েছে:

@RenderSection("scripts", required: false) 

এবং আপনার সূচি.কম:

@section scripts{
     @Scripts.Render("~/Scripts/file.js")
}

এবং এটি আপনার সমস্ত আংশিক দর্শন নিয়ে কাজ করবে। এটা আমার জন্য কাজ করে


0

এমভিসি কোর ব্যবহার করে আপনি scriptsনীচের মত দেখতে একটি পরিপাটি TagHelper তৈরি করতে পারেন । এটি সহজেই কোনও sectionট্যাগে মোড় দেওয়া যেতে পারে যেখানে আপনি এটির নামও দিয়ে থাকেন (বা নামটি উত্পন্ন প্রকারের থেকে নেওয়া হয়েছে)। নোট করুন যে নির্ভরতা ইনজেকশনটির জন্য সেটআপ করা দরকার IHttpContextAccessor

স্ক্রিপ্ট যুক্ত করার সময় (যেমন একটি আংশিক)

<scripts>
    <script type="text/javascript">
        //anything here
    </script>
</scripts>

স্ক্রিপ্টগুলি আউটপুট দেওয়ার সময় (যেমন একটি বিন্যাসের ফাইলে)

<scripts render="true"></scripts>

কোড

public class ScriptsTagHelper : TagHelper
    {
        private static readonly object ITEMSKEY = new Object();

        private IDictionary<object, object> _items => _httpContextAccessor?.HttpContext?.Items;

        private IHttpContextAccessor _httpContextAccessor;

        public ScriptsTagHelper(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            var attribute = (TagHelperAttribute)null;
            context.AllAttributes.TryGetAttribute("render",out attribute);

            var render = false;

            if(attribute != null)
            {
                render = Convert.ToBoolean(attribute.Value.ToString());
            }

            if (render)
            {
                if (_items.ContainsKey(ITEMSKEY))
                {
                    var scripts = _items[ITEMSKEY] as List<HtmlString>;

                    var content = String.Concat(scripts);

                    output.Content.SetHtmlContent(content);
                }
            }
            else
            {
                List<HtmlString> list = null;

                if (!_items.ContainsKey(ITEMSKEY))
                {
                    list = new List<HtmlString>();
                    _items[ITEMSKEY] = list;
                }

                list = _items[ITEMSKEY] as List<HtmlString>;

                var content = await output.GetChildContentAsync();

                list.Add(new HtmlString(content.GetContent()));
            }
        }
    }

-1

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

তবে, আমি মনে করি, আপনার স্ক্রিপ্টটি যদি আপনার আংশিকভাবে দৃ tight়ভাবে জুড়ে যায় তবে আপনার জাভাস্ক্রিপ্টটি সরাসরি<script> আপনার আংশিক অভ্যন্তরে একটি ইনলাইন ট্যাগের ভিতরে রাখুন এবং এটি দিয়ে সম্পন্ন করুন (আপনি যদি একবারের বেশি বার আংশিক ব্যবহারের উদ্দেশ্যে থাকেন তবে স্ক্রিপ্টের অনুলিপি সম্পর্কে সতর্ক থাকুন) একক দৃষ্টিতে);


1
এটি সাধারণত আদর্শ হয় না কারণ ইন-লাইন স্ক্রিপ্টগুলির পরে jQuery ইত্যাদি লোড হবে ... তবে স্থানীয় কোডের জন্য আমার ধারণা এটি ঠিক আছে।
মূল্যবান 7

-3

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

কেবলমাত্র আমি মনে করি, কীভাবে এটি বাদ দেওয়া যায়, তা হ'ল যখন আমরা এই জাতীয় UI উদ্বেগগুলি পরিচালনা করার একটি আপত্তিজনক উপায় তৈরি করি।

আরও লক্ষ করুন যে এমভিসি 6 তে তথাকথিত ভিউ কম্পোনেন্ট থাকবে, এমনকি এমভিসি ফিউচারগুলিতেও কিছু অনুরূপ স্টাফ ছিল এবং টেলরিকও এ জাতীয় জিনিস সমর্থন করে ...


1
3 বছর দেরী হয়ে গেছে, এবং আমি মনে করি না এটি এমনকি প্রশ্নের উত্তর দেয় না? আপনি এখানে কি বলতে চাইছেন? ভবিষ্যতের প্রযুক্তিগুলির অনুমানমূলক বৈশিষ্ট্যগুলির সাথে 3 বছর পরে একটি প্রশ্নের উত্তর দেওয়া আসলে কোনও উত্তর বা বিশেষ সহায়ক নয়
ড্যান রিচার্ডসন

-3

আমি এই কোডটি আমার আংশিক দৃশ্যে সবেমাত্র যুক্ত করেছি এবং সমস্যার সমাধান করেছি, যদিও খুব পরিষ্কার নয়, এটি কাজ করে। আপনাকে রেন্ডার করা অবজেক্টগুলির আইডি নিশ্চিত করতে হবে।

<script>
    $(document).ready(function () {
        $("#Profile_ProfileID").selectmenu({ icons: { button: 'ui-icon-circle-arrow-s' } });
        $("#TitleID_FK").selectmenu({ icons: { button: 'ui-icon-circle-arrow-s' } });
        $("#CityID_FK").selectmenu({ icons: { button: 'ui-icon-circle-arrow-s' } });
        $("#GenderID_FK").selectmenu({ icons: { button: 'ui-icon-circle-arrow-s' } });
        $("#PackageID_FK").selectmenu({ icons: { button: 'ui-icon-circle-arrow-s' } });
    });
</script>

-5

আমি এটির সাথে একই সমস্যাটি সমাধান করেছি:

@section ***{
@RenderSection("****", required: false)
}

আমি অনুমান করার জন্য ইনজেকশনের একটি দুর্দান্ত উপায়।

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