রেজার অনাবৃত এইচটিএমএল ট্যাগগুলি বুঝতে পারে না


100

রেজারভিউইনগাইন সহ, আমি এটি করতে পারি:

if (somecondition) {
     <div> some stuff </div>
}

তবে আমি এটি করতে পারি বলে মনে হচ্ছে না (রেজার বিভ্রান্ত হয়ে পড়ে):

if (somecondition) {
    <div>
}

if (someothercondition) {
    </div>
}

আমার এমন একটি পরিস্থিতি রয়েছে যাতে আমার খোলার এবং শেষ করার জন্য HTML কোডগুলি বিভিন্ন কোড ব্লকে রাখা দরকার - আমি রেজারে এটি কীভাবে করব?

উত্তর:


162

এটির মতো চেষ্টা করুন:

if (somecondition) {
    @:<div>
}


17
<text><div></text>কাজ করে, কিন্তু <text></div></text>না।
8:59

@ স্টান্টম্যান এটি কাজ করার জন্য আপনার উদ্বোধন এবং সমাপনী ট্যাগ উভয়ের জন্য এটি করা দরকার।
Departamento বি

এবং মাল্টলাইন পাঠ্যটি কীভাবে মোকাবেলা করবেন?
দিমিত্রি সোসয়

আমি এই ইনলাইনটি করতে পারিনি। যদি (শর্ত) {@: ট্যাগ}} আমাকে উপরের মতো ফর্ম্যাট করতে হয়েছিল।
মাইক 20

59

ডারিনের উত্তরটি বোঝাতে, যেমন এইচটিএমএলটির উপস্থাপন করা:

@:<html>

@: রেজার মানে 'কিছু সরল পাঠ্য হিসাবে রেন্ডার'

অথবা আপনি এটি ব্যবহার করতে পারেন যা এইচটিএমএলকে আপনি প্রচলিতভাবে লিখেছেন বলে আউটপুট দেয় (এটি আপনি স্বয়ংক্রিয় এইচটিএমএল এনকোডিং এড়ানোর জন্যও ব্যবহার করতে পারেন যা আপনি যদি এইচটিএমএল আউটপুট দেওয়ার চেষ্টা করছেন তবে)

@Html.Raw("<html>")

(এমএসটি থেকে এইচটিএমএল. রা রেফারেন্স - http://msdn.microsoft.com/en-us/library/gg568896(v=vs.111).aspx )


4
সমাধানগুলি দুর্দান্ত তবে ব্যাখ্যাগুলি অমূল্য। ধন্যবাদ!
জয়

4
আমি @ এইচটিএমএল.রো ("<html>") সমাধানটি পছন্দ করি, কারণ অটো ফর্ম্যাটিং (
সিটিআরএল

@ ম্যাটটিওসানজিটা সত্য যদি না আপনি আউটপুট করছেন তবে রেজার ভেরিয়েবলগুলি এতে ছিটিয়ে না দেওয়া আছে, উদাহরণস্বরূপ:@:<a href="@link" class="@classNames">@text</a>
q জেক


4

আপনি একটি কাস্টম এমভিসি সহায়ক পদ্ধতি তৈরি করতে পারেন। আপনার সাথে নেমস্পেসে একটি পাবলিক স্ট্যাটিক ক্লাস মাইরেন্ডারহেল্পার তৈরি করুন System.Web.Mvc.Htmlএবং একটি পদ্ধতি এইচটিএমএল লিখুন।

namespace System.Web.Mvc.Html
{
    public static class MyRenderHelpers
    {
        public static MvcHtmlString Html(this HtmlHelper helper, string html, bool condition)
        {
            if (condition)
                return MvcHtmlString.Create(html);
            else
                return MvcHtmlString.Empty;
        }
    }
}

এখন আপনি নিজের রেজার ভিউতে এই এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন:

@Html.Html("<div>", somecondition)

3

আপনাকে এটি করতে হবে তা সাধারণত ইঙ্গিত দেয় যে আপনার ভিউ কোডটি সঠিকভাবে ফ্যাক্টর হয়নি। এইচটিএমএলটির প্রকৃতিটি ভারসাম্যযুক্ত বা স্ব-সংযুক্ত ট্যাগগুলি থাকতে হবে (অন্তত এইচটিএমএল 4 এ, এইচটিএমএল 5 এর থেকে ঝুঁকছে বলে মনে হচ্ছে) এবং রেজার সেই অনুমানের উপর নির্ভর করে। আপনি যদি শর্তাধীনভাবে আউটপুটটিতে যাচ্ছেন <div>তবে আপনি পরে কোথাও আউটপুটও পাবেন </div>। আপনার ifবিবৃতিতে কেবল জোড় জোড় রাখুন :

@if(something) {
    <div>
        Other stuff
    </div>
}

অন্যথায় আপনি এখানে মত অদ্ভুত কোড দিয়ে শেষ ।



ঠিক আছে, আমার বক্তব্যটি হল 99% ক্ষেত্রে আপনার সম্ভবত হওয়া উচিত নয়। তবে আপনি সেই 1% এর মধ্যে ফিট হতে পারেন যেখানে @:বা আছে<text></text>
মার্চাইন্ড

7
পরে সম্ভবত তার একটি if (somecondition) { @:</div> }
অবসন্ন

হ্যাঁ, তাকে করতে হবে। আমার বক্তব্যটি হ'ল এই জাতীয় দৃষ্টিভঙ্গি পুনরুদ্ধার করা যেতে পারে যাতে এই জাতীয় দ্বৈত শর্তসাপেক্ষে প্রয়োজনীয় না হয়।
marcind

4
@ মিচিয়েলভু উদাহরণস্বরূপ শর্তসাপেক্ষে ডিভ র‌্যাপার রাখতে এই পদ্ধতিটি ব্যবহার করা খারাপ কেন? এইচটিএমএল 5 এ আপনি <link>ট্যাগগুলি বন্ধ করেন না ।
ক্রিস হেইনেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.