ASP.NET MVC Tak/Nie przyciski radiowe z silnie powiązanym modelem MVC
Czy ktoś wie jak powiązać przycisk opcji Tak/nie z właściwością logiczną silnie wpisanego modelu w ASP.NET MVC.
Model
public class MyClass
{
public bool Blah { get; set; }
}
Widok
<%@ Page Title="blah" Inherits="MyClass"%>
<dd>
<%= Html.RadioButton("blah", Model.blah) %> Yes
<%= Html.RadioButton("blah", Model.blah) %> No
</dd>
Dzięki
Rozwiązanie:
Dzięki dla Briana za kierunek, ale to było przeciwieństwo tego, co napisał. As so -
<%@ Page Title="blah" Inherits="MyClass"%>
<dd>
<%= Html.RadioButton("blah", !Model.blah) %> Yes
<%= Html.RadioButton("blah", Model.blah) %> No
</dd>
8 answers
Drugi parametr jest wybrany, więc użyj ! aby wybrać wartość no, gdy wartość logiczna jest false.
<%= Html.RadioButton("blah", !Model.blah) %> Yes
<%= Html.RadioButton("blah", Model.blah) %> No
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-08 05:37:28
Jeśli używasz MVC 3 i Razor, możesz również użyć:
@Html.RadioButtonFor(model => model.blah, true) Yes
@Html.RadioButtonFor(model => model.blah, false) No
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-16 04:16:45
Oto pełniejszy przykład użycia fieldset
ze względów dostępności i określenia pierwszego przycisku jako domyślnego. Bez fieldset
, do czego służą przyciski radiowe jako całość, nie można programowo określić.
Model
public class MyModel
{
public bool IsMarried { get; set; }
}
Widok
<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>
Możesz dodać argument @checked
do obiektu anonimowego, aby ustawić przycisk radiowy jako domyślny:
new { id = "married-true", @checked = 'checked' }
Zauważ, że możesz powiązać łańcuch poprzez zastąpienie true
i {[7] } łańcuchem wartości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 17:33:42
Bazując nieco na odpowiedzi Bena, dodałem atrybuty identyfikatora, aby móc używać etykiet.
<%: 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" })%>
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-24 22:44:26
Dodanie znaczników etykiet wokół przycisków opcji za pomocą zwykłego kodu HTML również naprawi problem "labelfor":
<label><%= Html.RadioButton("blah", !Model.blah) %> Yes</label>
<label><%= Html.RadioButton("blah", Model.blah) %> No</label>
Kliknięcie na tekst powoduje wybranie odpowiedniego przycisku radiowego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-05 14:56:57
Lub MVC 2.0:
<%= Html.RadioButtonFor(model => model.blah, true) %> Yes
<%= Html.RadioButtonFor(model => model.blah, false) %> No
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 06:41:09
Jeśli mogę rzucić kapelusz na ring, myślę, że jest czystszy sposób niż istniejące odpowiedzi na ponowne użycie funkcji przycisku radiowego.
Załóżmy, że masz następującą właściwość w swoim ViewModel :
Public Class ViewModel
<Display(Name:="Do you like Cats?")>
Public Property LikesCats As Boolean
End Class
Możesz ujawnić tę właściwość za pomocą wielokrotnego użytku szablon edytora:
Najpierw Utwórz plik Views/Shared/EditorTemplates/YesNoRadio.vbhtml
Następnie dodaj następujący kod do 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>
Możesz zadzwonić do edytora dla właściwość poprzez ręczne podanie nazwy szablonu w widoku :
@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")
Plusy:
- Get to write HTML in a HTML editor zamiast appending strings in code behind.
- zachowuje dane DisplayName
- pozwala kliknąć na etykiecie, aby włączyć przycisk radiowy
- najmniejszy możliwy kod do utrzymania w formie (1 linia). Jeśli coś jest nie tak ze sposobem, w jaki jest renderowany, zapoznaj się z szablonem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-14 18:27:27
Skończyło się na zapakowaniu tego do metody rozszerzenia, więc (1) mogłem wygenerować etykietę i radio na raz i (2) więc nie musiałem się martwić o podanie własnych identyfikatorów:
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());
}
}
Użycie:
@Html.RadioButtonAndLabelFor(m => m.IsMarried, true, "Yes, I am married")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 21:18:47