ব্যবহারবিধি ? : যদি রেজার এবং ইনলাইন কোড ব্লকগুলির সাথে বিবৃতি


154

আমি আমার পুরানো .aspx ভিউগুলি নতুন রেজার ভিউ ইঞ্জিনের সাথে আপডেট করছি। আমার কাছে এমন অনেকগুলি জায়গা রয়েছে যেখানে আমার কোড রয়েছে:

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>

আদর্শভাবে আমি এটি করতে চাই:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>

তবে এখানে দুটি সমস্যা রয়েছে:

  1. vote-up@{puzzle.UserVote .... একটি কোড ব্লকের সূচনা হিসাবে @ প্রতীকটিকে বিবেচনা করছে না
  2. @puzzle.UserVote == VoteType.Upপ্রথম অংশটিকে দেখে মনে হচ্ছে @puzzle.UserVoteযেন এটি ভেরিয়েবলের মান রেন্ডার করে।

এই সমস্যাগুলি কীভাবে সমাধান করা যায় কেউ জানেন?


6
আমি রেজার ব্যবহার করি নি তবে যা দেখছি তার উপর ভিত্তি করে চেষ্টা করে দেখুন@(puzzle.UserVote == VoteType.Up ? "-selected" : "")
ল্যাসে এসপল্ট

যেহেতু রেজারে ইনলাইন টার্নারি অপারেটরগুলির পক্ষে এটি শীর্ষ ফলাফল, আমি যুক্ত করব যে আপনার আউটপুটে যদি html বা এনকোডেবল অক্ষর যেমন অ্যাডোস্ট্রোফস রয়েছে, উদাহরণস্বরূপ @(isSomething ? "class='test'" : "")জাভাস্ক্রিপ্ট বা ইনজেকশন ইনজেক্ট করা, এটি সেগুলিকে সারণী হিসাবে এনকোড করবে &#39;এবং পৃষ্ঠাটি ভেঙে দেবে। সুতরাং আপনি অবশ্যই ব্যবহার করা উচিত Html.Raw("..")। অন্যথায় উপরের কোডটি দিয়ে আপনি এমন কিছু দিয়ে শেষ করতে চান <p class=&#39;test&#39;>যা অবৈধ।
নিবল্লিপিগ

উত্তর:



32

কীটি হ'ল @ ডিলিমিটারের পরে বন্ধনীগুলিতে এক্সপ্রেশনটি সজ্জিত করে। আপনি যে কোনও যৌগিক এক্সপ্রেশনটি এভাবে কাজ করতে পারেন।


28
@( condition ? "true" : "false" )

1
আমি এইটির জন্য গিয়েছিলাম, পরিষ্কার অনুভব করেছি এবং পরে এটি আবার পড়তে সহজ
ড্যান হ্যারিস

1
টস্টস্ট্রিং () কল করার পরিবর্তে আপনার যদি কোনও সম্পত্তির মান (স্ট্রিং সহ) প্রদর্শন করার দরকার হয় - যা আমার ক্ষেত্রে কার্যকর হয়নি। আপনি এটি @ (শর্ত? $ "{Foo.bar}": "ডিফল্ট") করতে পারেন
ড্যান হ্যারিস

6

অধিকাংশ ক্ষেত্রে সমাধান এর সিডি .. জরিমানা পুরোপুরি কাজ করবে। তবে আমার কিছুটা বাঁকা পরিস্থিতি ছিল:

 @(String.IsNullOrEmpty(Model.MaidenName) ? "&nbsp;" : Model.MaidenName)

এটি আমার "& nbsp;" মুদ্রণ করবে আমার পৃষ্ঠাতে যথাক্রমে উত্স উত্পন্ন করুন &amp;nbsp;। এখন একটি ফাংশন রয়েছে Html.Raw("&nbsp;")যা আপনাকে উত্স কোডটি লিখতে দেবে বলে মনে করা হচ্ছে, কেবল এই নক্ষত্রমণ্ডলে এটি একটি সংকলক ত্রুটি ছুঁড়েছে:

সংকলক ত্রুটির বার্তা: CS0173: শর্তসাপেক্ষ অভিব্যক্তির প্রকারটি নির্ধারণ করা যায়নি কারণ 'সিস্টেম. ওয়েবে.আইএইচটিএমএল স্ট্রিং' এবং 'স্ট্রিং' এর মধ্যে কোনও অন্তর্নিহিত রূপান্তর নেই because

সুতরাং আমি নীচের মত একটি বিবৃতি লেখা শেষ, যা কম সুন্দর তবে আমার ক্ষেত্রে এমনকি কাজ করে:

@if (String.IsNullOrEmpty(Model.MaidenName)) { @Html.Raw("&nbsp;") } else { @Model.MaidenName } 

দ্রষ্টব্য: মজার বিষয় হ'ল একবার আপনি কোঁকড়া ধনুর্বন্ধনী ভিতরে ,ুকে পরে আপনাকে একটি রেজার ব্লক পুনরায় চালু করতে হবে।


কেন শুধু নয়@(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&nbsp;") : Model.MaidenName)
জেপি হেলেনমস

উহম .. উপরোক্ত সংকলক ত্রুটির কারণে কীভাবে? ;)
দামিয়ান ভোগেল

3
দুঃখিত, আমার আরও কফির দরকার আছে :)
জেপি হেলিমোনস

1
আপনি এই ত্রুটিটি এড়াতে পারবেন @(String.IsNullOrEmpty(Model.MaidenName) ? Html.Raw("&nbsp;") : Html.Raw(Model.MaidenName))
টের্নারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.