এএসপি.এনইটি এমভিসি হ্যাঁ / শক্তিশালী বাউন্ড মডেল এমভিসি সহ কোনও রেডিও বোতাম নেই


132

কেউ কি জানেন যে কীভাবে এএসপি.নেট এমভিসিতে শক্তিশালী টাইপযুক্ত মডেলের বুলিয়ান সম্পত্তিটিতে হ্যাঁ / নো রেডিও বোতাম বাঁধতে হয়।

মডেল

public class MyClass
{
     public bool Blah { get; set; }
}

দৃশ্য

<%@  Page Title="blah"  Inherits="MyClass"%>
    <dd>
        <%= Html.RadioButton("blah", Model.blah) %> Yes
        <%= Html.RadioButton("blah", Model.blah) %> No
    </dd>

ধন্যবাদ

সমাধান:

দিকনির্দেশের জন্য ব্রায়ানের জন্য ধন্যবাদ তবে তিনি যা লিখেছিলেন তা তার বিপরীত ছিল। যেমন -

<%@  Page Title="blah"  Inherits="MyClass"%>
<dd>
    <%= Html.RadioButton("blah", !Model.blah) %> Yes
    <%= Html.RadioButton("blah", Model.blah) %> No
</dd>

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

2
কীভাবে লেবেল ইস্যুটি মার্জিতভাবে ঠিক করা যায় তা দেখতে জেফ বোবিশের উত্তর দেখুন।
রেনে

উত্তর:


74

দ্বিতীয় প্যারামিটারটি নির্বাচিত, সুতরাং এটি ব্যবহার করুন! বুলিয়ান মিথ্যা হলে কোনও মান নির্বাচন করতে।

<%= Html.RadioButton("blah", !Model.blah) %> Yes 
<%= Html.RadioButton("blah", Model.blah) %> No 

198

আপনি যদি এমভিসি 3 এবং রেজার ব্যবহার করেন তবে আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

@Html.RadioButtonFor(model => model.blah, true) Yes
@Html.RadioButtonFor(model => model.blah, false) No

56

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

মডেল

public class MyModel
{
    public bool IsMarried { get; set; }
}

দৃশ্য

<fieldset>
    <legend>Married</legend>

    @Html.RadioButtonFor(e => e.IsMarried, true, new { id = "married-true" })
    @Html.Label("married-true", "Yes")

    @Html.RadioButtonFor(e => e.IsMarried, false, new { id = "married-false" })
    @Html.Label("married-false", "No")
</fieldset>

@checkedডিফল্ট হিসাবে রেডিও বোতামটি সেট করতে আপনি বেনামে অবজেক্টটিতে যুক্তি যুক্ত করতে পারেন :

new { id = "married-true", @checked = 'checked' }

নোট করুন যে প্রতিস্থাপন করে trueএবং falseস্ট্রিংয়ের মানগুলি দিয়ে আপনি একটি স্ট্রিংয়ের সাথে আবদ্ধ হতে পারেন ।


আপনার আসলে নতুন {id = Html.Id ("বিবাহিত-সত্য") use ব্যবহার করা উচিত, উত্পন্ন আইডি উপসর্গগুলির সম্ভাব্য স্কোপ সমস্যাগুলি হ্রাস করে।
ইওলোরি

26

বেনের উত্তর থেকে কিছুটা দূরে গিয়ে আমি আইডির জন্য বৈশিষ্ট্যগুলি যুক্ত করেছি যাতে আমি লেবেলগুলি ব্যবহার করতে পারি।

<%: Html.Label("isBlahYes", "Yes")%><%= Html.RadioButtonFor(model => model.blah, true, new { @id = "isBlahYes" })%>
<%: Html.Label("isBlahNo", "No")%><%= Html.RadioButtonFor(model => model.blah, false, new { @id = "isBlahNo" })%>

আশা করি এটা কাজে লাগবে.


7
সাধারণত লেবেলটি একটি রেডিও বোতামের পরে থাকে।
ড্যানিয়েল ইমস

6
একটি রেডিও বোতামের চারপাশে একটি লেবেল স্থাপন পুরোপুরি বৈধ।
স্কট বেকার

23

নিয়মিত এইচটিএমএল ব্যবহার করে রেডিও বোতামগুলির চারপাশে লেবেল ট্যাগগুলি যুক্ত করা 'লেবেলফোর্ড' সমস্যাটিও ঠিক করে দেবে:

<label><%= Html.RadioButton("blah", !Model.blah) %> Yes</label>
<label><%= Html.RadioButton("blah", Model.blah) %> No</label>

পাঠ্যে ক্লিক করা এখন উপযুক্ত রেডিও বোতামটি নির্বাচন করে।



5

যদি আমি আমার টুপিটি রিংয়ের মধ্যে ফেলে দিতে পারি তবে আমি মনে করি রেডিও বোতামের কার্যকারিতা পুনরায় ব্যবহার করার জন্য বিদ্যমান উত্তরগুলির চেয়ে আরও পরিষ্কার উপায় আছে।

আসুন ধরা যাক আপনার ভিউমোডেলে নিম্নলিখিত সম্পত্তি রয়েছে :

Public Class ViewModel
    <Display(Name:="Do you like Cats?")>
    Public Property LikesCats As Boolean
End Class

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

প্রথমে ফাইলটি তৈরি করুন Views/Shared/EditorTemplates/YesNoRadio.vbhtml

তারপরে নিম্নলিখিত কোডটি YesNoRadio.vbhtml এ যুক্ত করুন :

@ModelType Boolean?

<fieldset>
    <legend>
        @Html.LabelFor(Function(model) model)
    </legend>

    <label>
        @Html.RadioButtonFor(Function(model) model, True) Yes
    </label>
    <label>
        @Html.RadioButtonFor(Function(model) model, False) No
    </label>
</fieldset>

আপনি নিজের ভিউতে টেমপ্লেটের নামটি ম্যানুয়ালি নির্দিষ্ট করে সম্পত্তিটির জন্য সম্পাদককে কল করতে পারেন :

@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")

পেশাদাররা:

  • পিছনে কোডে স্ট্রিং যুক্ত করার পরিবর্তে এইচটিএমএল সম্পাদকটিতে HTML লিখতে পান।
  • প্রদর্শন নাম ডেটা অ্যানোটেশন সংরক্ষণ করে
  • লেবেলে ক্লিকগুলিকে রেডিও বোতাম টগল করার অনুমতি দেয়
  • ফর্ম (1 লাইন) বজায় রাখতে কমপক্ষে সম্ভব কোড। যদি কিছুভাবে রেন্ডার হয়ে থাকে তবে কিছু ভুল হলে টেমপ্লেটটি নিয়ে যান।

এটি ভাল, তবে বুলিয়ানের জন্য তৃতীয় বিকল্পটি কী? @ এইচটিএমএল.আরডিও বাটনফোর্ন (ফাংশন (মডেল) মডেল.আইএস যাচাইকৃত, সত্য) <স্প্যান> হ্যাঁ </ span> @ এইচটিএমএল. রেডিওবাটনফোর্স (ফাংশন (মডেল) মডেল.আইএস যাচাইকৃত, ভুয়া) <স্প্যান> না </ span> @ এইচটিএমএল। রেডিও বাটনের জন্য (ফাংশন (মডেল) মডেল.আইএস যাচাইকৃত, কিছুই নয়) <span> মুলতুবি </ span>
JoshYates1980

1

আমি এটিকে একটি এক্সটেনশন পদ্ধতিতে প্যাকেজিং শেষ করেছি যাতে (1) আমি একবারে লেবেল এবং রেডিও তৈরি করতে পারি এবং (2) যাতে আমার নিজের আইডি নির্দিষ্ট করে বলতে হয় না:

public static class HtmlHelperExtensions
{
    public static MvcHtmlString RadioButtonAndLabelFor<TModel, TProperty>(this HtmlHelper<TModel> self, Expression<Func<TModel, TProperty>> expression, bool value, string labelText)
    {
        // Retrieve the qualified model identifier
        string name = ExpressionHelper.GetExpressionText(expression);
        string fullName = self.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);

        // Generate the base ID
        TagBuilder tagBuilder = new TagBuilder("input");
        tagBuilder.GenerateId(fullName);
        string idAttr = tagBuilder.Attributes["id"];

        // Create an ID specific to the boolean direction
        idAttr = String.Format("{0}_{1}", idAttr, value);

        // Create the individual HTML elements, using the generated ID
        MvcHtmlString radioButton = self.RadioButtonFor(expression, value, new { id = idAttr });
        MvcHtmlString label = self.Label(idAttr, labelText);

        return new MvcHtmlString(radioButton.ToHtmlString() + label.ToHtmlString());
    }
}

ব্যবহার:

@Html.RadioButtonAndLabelFor(m => m.IsMarried, true, "Yes, I am married")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.