এমভিসি 3 তে রেজারে লেবেলফোর্ডের প্রদর্শনের নামটি কীভাবে পরিবর্তন করবেন?


87

রেজার ইঞ্জিনে আমি LabelForনামটি প্রদর্শনের জন্য সহায়ক পদ্ধতি ব্যবহার করেছি

তবে প্রদর্শনের নামটি প্রদর্শন করা ভাল বলে মনে হচ্ছে না। সুতরাং আমার প্রদর্শন নামটি এটি কীভাবে করা যায় তা পরিবর্তন করা দরকার ....

@Html.LabelFor(model => model.SomekingStatus, new { @class = "control-label"}) 

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

উত্তর:


161

আপনি [DisplayName]গুণাবলী দিয়ে আপনার ভিউ মডেল সম্পত্তি সাজাইয়া এবং ব্যবহার করা পাঠ্য নির্দিষ্ট করতে পারেন:

[DisplayName("foo bar")]
public string SomekingStatus { get; set; }

বা লেবেলফোর্ড সহায়কটির অন্য একটি ওভারলোড ব্যবহার করুন যা আপনাকে পাঠ্যটি নির্দিষ্ট করতে দেয়:

@Html.LabelFor(model => model.SomekingStatus, "foo bar")

এবং, না, আপনি যেমন চেষ্টা করার চেষ্টা করেছিলেন এমভিসি 3 তে কোনও শ্রেণীর নাম নির্দিষ্ট করতে পারবেন না, কারণ LabelForসাহায্যকারী এটি সমর্থন করে না। তবে এটি এমভিসি 4 বা 5 এ কাজ করবে।


@ raj2sekar1, যদি এটি কাজ করে এবং এই উত্তরটি আপনার যে সমস্যার মুখোমুখি হচ্ছিল তা সমাধান করার জন্য আপনাকে তার পাশের টিকটিতে
দারিন দিমিত্রভ ২

8
যদিও আপনাকে সিস্টেম.কম্পোনেন্টমোডেল ব্যবহার করা দরকার।
ইয়াসেইন

4
এটি দরকারী ছিল, আপনাকে ধন্যবাদ। তবে আমি মনে করি আপনার উত্তরটি যদি এর পরিবর্তে ভাল হয় তবে ভাল হবে@Html.LabelFor(model => model.SomekingStatus, "something other than foo bar")
vegemite4me

4
সম্ভবত এই একটি সময় আগে লিখিত, কিন্তু এখন আপনি LabelFor ভিতরে বর্গ নাম উল্লেখ করতে পারেন: যেমন @ Html.LabelFor (মডেল => model.SomekingStatus, নতুন {@class = "আপনার-CSS-শ্রেণী"})
ra170

4
আপনি যদি ডাটাবেস আপডেট করেন তবে মডেল ক্লাসগুলি পুনরায় জেনারেট হয় এবং আপনি এটি হারাবেন। কীভাবে এড়ানো যায়?
শিম 21

30

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

আপনার কাছে 3 টি বিকল্প রয়েছে:

  • [DisplayName("Name goes here")]ডেটা মডেল শ্রেণিতে একটি বৈশিষ্ট্য যুক্ত করুন । খারাপ দিকটি হ'ল আপনি যখনই ডেটা মডেলগুলি পুনরায় জেনারেট করেন তখন এটিকে ফেলে দেওয়া হয়।
  • আপনার স্ট্রিং প্যারামিটার যুক্ত করুন Html.LabelFor। উদাহরণস্বরূপ @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"}): https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx এর অসুবিধেটি হ'ল আপনাকে অবশ্যই লেবেলটি পুনরাবৃত্তি করতে হবে প্রতিটি দৃষ্টিতে
  • তৃতীয় বিকল্প। ডেটা ক্লাসের সাথে সংযুক্ত একটি মেটা-ডেটা ক্লাস ব্যবহার করুন (বিশদ বিবরণ অনুসরণ করুন)।

বিকল্প 3 - একটি মেটা-ডেটা ক্লাস যুক্ত করুন:

মাইক্রোসফ্ট বিদ্যমান ক্লাসটি পরিবর্তন না করে কোনও সত্তা ফ্রেমওয়ার্ক ক্লাসে সম্পত্তি সজ্জিত করার অনুমতি দেয় ! এটি আপনার ডেটাবেস ক্লাসগুলির সাথে সংযুক্ত মেটা-ডেটা ক্লাস করে (কার্যকরভাবে আপনার EF বর্গের পাশের প্রসারিত)। এটি বৈশিষ্ট্যগুলিকে সংশ্লিষ্ট শ্রেণিতে যুক্ত করার অনুমতি দেয় এবং নিজেই ক্লাসে নয় যাতে আপনি ডেটা মডেলগুলি পুনরায় জেনারেট করার সময় পরিবর্তনগুলি হারাতে পারে না

উদাহরণস্বরূপ, যদি আপনার ডেটা ক্লাস MyModelকোনও SomekingStatusসম্পত্তির সাথে থাকে তবে আপনি এটি এটি করতে পারেন:

প্রথমে একই নামের একটি আংশিক শ্রেণি ঘোষণা করুন (এবং একই নামস্থানটি ব্যবহার করে), যা আপনাকে ওভাররাইড না করে কোনও শ্রেণীর বৈশিষ্ট্য যুক্ত করতে দেয়:

[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}

সমস্ত উত্পন্ন ডেটা মডেল ক্লাসগুলি আংশিক শ্রেণি, যা আপনাকে একই নামের আরও ক্লাস তৈরি করে অতিরিক্ত বৈশিষ্ট্য এবং পদ্ধতি যুক্ত করার অনুমতি দেয় (এটি খুব সহজ এবং আমি প্রায়শই এটি ব্যবহার করি যেমন মডেলটিতে অন্যান্য ক্ষেত্রের ধরণের স্ট্র্যাড সংস্করণ সরবরাহ করতে) )।

পদক্ষেপ 2: আপনার নতুন আংশিক শ্রেণীর দ্বারা রেফারেন্সযুক্ত একটি মেটাডেটা ক্লাস যুক্ত করুন:

public class MyModelMetaData
{
    // Apply DisplayNameAttribute (or any other attributes)
    [DisplayName("My New Label")]
    public string SomekingStatus;
}

তথ্যসূত্র: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx

মন্তব্য:

  • মেমরি থেকে, যদি আপনি কোনও মেটাডেটা ক্লাস ব্যবহার শুরু করেন তবে এটি প্রকৃত বর্গ ( [required]ইত্যাদি) এর বিদ্যমান বৈশিষ্ট্যগুলিকে উপেক্ষা করতে পারে তাই আপনাকে মেটা-ডেটা ক্লাসে থাকা সদৃশদের প্রয়োজন হতে পারে।
  • এটি যাদু দ্বারা পরিচালিত হয় না এবং কেবল কোনও শ্রেণীর সাথে কাজ করবে না। ইউআই সজ্জা বৈশিষ্ট্যগুলির জন্য সন্ধানকারী কোডটি প্রথমে একটি মেটা-ডেটা শ্রেণীর জন্য ডিজাইন করা হয়েছে।

কেন এটির কোনও কারণ আছে যে এটি এএসপি.নেট কোর 3.1 এ কাজ করবে না? [প্রয়োজনীয়] কাজ করে, তবে [ডিসপ্লেনাম ("আমার লেবেল")) নয়
জন প্যাসকেট

15

DisplayNameবৈশিষ্ট্যের সাথে সম্পত্তি শোভিত করে আপনি লেবেলের পাঠ্য পরিবর্তন করতে পারেন ।

[DisplayName("Someking Status")]
public string SomekingStatus { get; set; }

অথবা, আপনি কাঁচা এইচটিএমএল স্পষ্টভাবে লিখতে পারেন:

<label for="SomekingStatus" class="control-label">Someking Status</label>

4
@ শিম: আপনার দৃষ্টিভঙ্গিতে আপনি সরাসরি ডাটাবেস / ডোমেন মডেল ক্লাসের সাথে কাজ করবেন না, সাধারণত মাঝখানে একটি মধ্যস্থতাকারী 'ভিউ-মডেল' শ্রেণি থাকবে।
ভিমন

লেবেল সিনট্যাক্সটি ব্যবহার করার জন্য আমি কীভাবে সন্ধান করছিলাম তা ধন্যবাদ .. ধন্যবাদ @ এক্সএন্ডার
আসিফ ইকবাল

4
"কাঁচা এইচটিএমএল স্পষ্টভাবে লিখুন" এ সমস্যাটি হ'ল আপনি যখনই এই ফর্মটি ব্যবহার করবেন তখন আপনাকে নিজেরাই লেবেলটি লিখতে হবে। মডেলটিতে ডি ডিসপ্লেনাম ঘোষণা করা ভাল।
César Leon

4

ডিসপ্লে নাম অ্যাট্রিবিউট দিয়ে মডেল সম্পত্তিটি সাজান।


1

@ এইচটিএমএল। লেবেলফোর্ড (মডেল => মডেল.সোমেকিং স্ট্যাটাস, "ফু বার")

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