এএসপি.নেট এমভিসি 3 রেজারে কীভাবে পঠনযোগ্য পাঠ্যবক্স তৈরি করবেন


118

আমি কীভাবে রেজার ভিউ ইঞ্জিন সহ এএসপি.নেট এমভিসি 3 এ একটি পঠনযোগ্য পাঠ্যবাক্স তৈরি করব?

এটি করার জন্য কি কোনও এইচটিএমএল হেল্পার পদ্ধতি উপলব্ধ?

নীচের মত কিছু?

@Html.ReadOnlyTextBoxFor(m => m.userCode)

উত্তর:


246
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })

আপনি এটির জন্য এইচটিএমএল সহায়ক তৈরি করতে আপনাকে স্বাগত জানালেন তবে এটি কেবল অন্যের মতো একটি এইচটিএমএল বৈশিষ্ট্য। আপনি কি এমন কোনও পাঠ্য বাক্সের জন্য এইচটিএমএল সহায়ক তৈরি করতে পারেন যাতে অন্যান্য বৈশিষ্ট্য রয়েছে?


1
@ শিজু দুঃখিত, আমি সম্পত্তির @উপসর্গটি অনুপস্থিত readonly। আমার সম্পাদনা দেখুন।

7
ভবিষ্যতে, আপনি যদি গতিশীল অবজেক্ট আর্গুমেন্টে বৈশিষ্ট্য যুক্ত করতে কোনও ধরণের ত্রুটি পান তবে আপনি সেগুলি এর সাথে উপসর্গ করতে পারেন @। আপনি কেবলমাত্র এটিকে এইচটিএমএল বৈশিষ্ট্যগুলির সাথে মেলে এমন কীওয়ার্ডগুলির সাথে দেখতে পাবেন (যেমন কেবলমাত্র পাঠ্য, শ্রেণী ইত্যাদি)
ব্র্যাড ক্রিস্টি

10
@ ব্র্যাডচ্রিস্টি: না; আপনার কেবলমাত্র সি # কীওয়ার্ডের সাথে @মেলে এমন বৈশিষ্ট্যগুলি ব্যবহার করতে একটি প্রয়োজন ।
স্ল্যাक्स

1
@ ব্র্যাডক্রিশি: আমি আপনার মন্তব্যটি ভুলভাবে পড়েছি ("কীওয়ার্ডগুলি" অস্পষ্ট ছিল)
স্ল্যাक्स

1
আপনার যদি একাধিক এইচটিএমএল বৈশিষ্ট্য থাকে তবে আপনি এর মতো কিছু করতে পারেন:@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
বেনস্ক্যাবিয়া

32

আপডেট: এখন ডিফল্ট সম্পাদক টেম্পলেটগুলিতে এইচটিএমএল বৈশিষ্ট্য যুক্ত করা খুব সহজ। এটি করার পরিবর্তে এটি নিকটস্থ হয়:

@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })

আপনি কেবল এটি করতে পারেন:

@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })

উপকারিতা: .TextBoxForটেমপ্লেটগুলির জন্য আপনাকে কল করতে হবে না । শুধু কল .EditorFor


@ শার্কের সমাধানটি সঠিকভাবে কাজ করে এবং এটি সহজ এবং দরকারী, আমার সমাধান (যা আমি সর্বদা ব্যবহার করি) এটি হ'ল: এমন একটি তৈরি করুন editor-templateযা readonlyবৈশিষ্ট্য পরিচালনা করতে পারে :

  1. নামে একটি ফোল্ডার তৈরি EditorTemplatesমধ্যে~/Views/Shared/
  2. PartialViewনামের একটি রেজার তৈরি করুনString.cshtml
  3. String.cshtmlএই কোডটি পূরণ করুন :

    @if(ViewData.ModelMetadata.IsReadOnly) {
        @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
            new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
    } else {
        @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
            new { @class = "text-box single-line" })
    }
  4. মডেল ক্লাসে, [ReadOnly(true)]আপনি যে বৈশিষ্ট্যগুলি হতে চান তাতে বৈশিষ্ট্যটি রেখে দিন readonly

উদাহরণ স্বরূপ,

public class Model {
    // [your-annotations-here]
    public string EditablePropertyExample { get; set; }

    // [your-annotations-here]
    [ReadOnly(true)]
    public string ReadOnlyPropertyExample { get; set; }
}

এখন আপনি রেজারের ডিফল্ট বাক্য গঠন সহজভাবে ব্যবহার করতে পারেন:

@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)

প্রথমটি এর text-boxমতো একটি সাধারণ রেন্ডার করে :

<input class="text-box single-line" id="field-id" name="field-name" />

এবং দ্বিতীয়টি রেন্ডার করবে;

<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />

আপনি ডেটা কোনো ধরনের জন্য এই সমাধান ব্যবহার করতে পারেন ( DateTime, DateTimeOffset, DataType.Text, DataType.MultilineTextইত্যাদি)। শুধু একটি তৈরি করুন editor-template


2
+1 কারণ আপনি "ViewData.ModelMetadata.IsReadOnly" ব্যবহার করেছেন। আমি আশা করছিলাম এমভিসি এই
স্টাফগুলিকে

@ ক্যালফেরিস ভাল আছে যে আমরা এখন 5 সংস্করণে আছি, এবং এমভিসি এখনও তাদের গ্রহণ করেনি;)
রেভি অ্যামিরি

2
@ জাভাদ_আমি - দুর্দান্ত উত্তর - আমি এটিকে বাস্তবায়ন করেছি এবং মনে হচ্ছে একটি স্ক্যাফোল্ডেড সম্পাদনা পৃষ্ঠায় সেভ ক্লিক না করা পর্যন্ত এটি দুর্দান্ত কাজ করবে। তারপরে এটি দেখা যাচ্ছে [ReadOnly (সত্য)] এর সাথে সম্পত্তিগুলি আসল সম্পত্তির মানের পরিবর্তে ডাটাবেসে NULL প্রেরণ করবে - আপনি কি এটি পেরিয়ে এসেছেন?
পার্সি 20

5

টেক্সটবক্সফোর্ডের সাথে সমাধানটি ঠিক আছে, তবে আপনি যদি এডিটবক্স স্টাইলিশের মতো ক্ষেত্রটি দেখতে না চান (এটি ব্যবহারকারীর জন্য কিছুটা বিভ্রান্তিকর হতে পারে) পরিবর্তনের সাথে জড়িত:

  1. পরিবর্তনের আগে রেজার কোড

    <div class="editor-field">
         @Html.EditorFor(model => model.Text)
         @Html.ValidationMessageFor(model => model.Text)
    </div>
  2. পরিবর্তনের পরে

    <!-- New div display-field (after div editor-label) -->
    <div class="display-field">
        @Html.DisplayFor(model => model.Text)
    </div>
    
    <div class="editor-field">
        <!-- change to HiddenFor in existing div editor-field -->
        @Html.HiddenFor(model => model.Text)
        @Html.ValidationMessageFor(model => model.Text)
    </div>

সাধারণত, এই সমাধানটি ক্ষেত্রটিকে সম্পাদনা করা থেকে বিরত করে তবে এর মান দেখায়। কোড-পিছনে পরিবর্তনগুলির প্রয়োজন নেই।


1
আমি মনে করি যে এখানে ক্লাস সম্পাদক-ক্ষেত্র এবং প্রদর্শন-ক্ষেত্রের জন্য CSS থাকা সত্যিই সহায়ক হতে পারে।
ডেকে

"এই সমাধানটি সম্পাদনার বিরুদ্ধে দায়ের করা অক্ষম করে ", এর অর্থ কী ? (এটি বোঝা যায় না বলে মনে হয়)? আপনার উত্তর সম্পাদনা করে প্রতিক্রিয়া জানান , এখানে মন্তব্যে নয় (যথাযথ হিসাবে)।
পিটার মর্টেনসেন

3

@ ব্রোনেক এবং @ শিমি দ্বারা পূর্ববর্তী উত্তরের ক্রেডিট সহ:

এটি এএসপি.নেট কোরে একই কাজটি করার মতো:

<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />

প্রথম ইনপুটটি কেবল পঠনযোগ্য এবং দ্বিতীয়টি নিয়ামকের কাছে মানটি পাস করে এবং লুকানো থাকে। আমি আশা করি এটিপি.এনইটি কোরের সাথে কাজ করা কারও পক্ষে এটি কার্যকর হবে।



0
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })

এটি পাঠ্য বাক্সের জন্য ঠিক is তবে, যদি আপনি checkboxএটির জন্য একই চেষ্টা করে থাকেন তবে যদি আপনি এটি ব্যবহার করে থাকেন তবে এটি ব্যবহার করার চেষ্টা করুন:

@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })

তবে ব্যবহার করবেন না disable, কারণ অক্ষম সর্বদা falseসার্ভারে ডিফল্ট মান প্রেরণ করে - হয় তা চেকড বা চেক করা অবস্থায় ছিল না। এবং readonlyচেকবক্স এবং এর জন্য কাজ করে না radio buttonreadonlyশুধুমাত্র textক্ষেত্রের জন্য কাজ করে।


ড্রপ ডাউন তালিকা সম্পর্কে কী?
ব্যবহারকারী 3020047

আশা করছি এটা সাহায্য করতে পারে stackoverflow.com/questions/1636103/...
gdmanandamohon

0

পাঠ্য-পাঠ্য হিসাবে কেবল পাঠ্যবক্স তৈরি করার জন্য আপনি নীচের কোডটি ব্যবহার করতে পারেন।

পদ্ধতি 1

 @Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })

পদ্ধতি 2

@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.