私は4つの単純なラジオボタンを保持するエディタテンプレートDuration
を持っています。
私のクラスTest
のプロパティにこのテンプレートを使用しています。 このプロパティをラジオボタンリストにバインドして読み込み時に正しいラジオボタンを選択することができません。値を選択して送信すると、正しい値が返されます。 ラジオボタンの値をさまざまな値に変更しようとしましたが、役に立たないです。
これを機能させるには、どの値をRadioButtonFor
に渡す必要がありますか? 理想的には、このエディタテンプレートはnull可のfloatを取り込み、それでも動作します。浮動小数点値でMVC RadioButtonForを使用して正しいラジオボタンを選択するにはどうすればよいですか?
Duration.cshtml
@model float
<h3>Model Value: @Model</h3>
@Html.RadioButtonFor(model => model, 0.25F, new { id = "btnQuarterDay" }) @(.25F)
@Html.RadioButtonFor(model => model, 0.5F, new { id = "btnHalfDay" }) @(.5F)
@Html.RadioButtonFor(model => model, 0.75F, new { id = "btnThreeQuarterDay" }) @(.75F)
@Html.RadioButtonFor(model => model, 1.0F, new { id = "btnOneDay" }) @(1.0F)
Test.cs
public class Test
{
[UIHint("Duration")]
[Display(Name = "Days")]
public float Duration { get; set; }
}
にHomeController
public class HomeController : Controller
{
public ActionResult Index(float? duration = null)
{
var model = new Test
{
Duration = duration.GetValueOrDefault(1F)
};
return View(model);
}
[HttpPost]
public ActionResult Index(Test model)
{
ViewBag.Success = true;
ViewBag.ValueSelected = model.Duration;
return View(model);
}
}
Index.cshtml
@model RadioButtonForTest.Models.Test
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div class="row">
<div class="col-md-4">
@Html.EditorFor(model => model.Duration)
@Html.ValidationMessageFor(model => model.Duration)
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
if (ViewBag.Success ?? false)
{
<span>Value Selected:</span> @ViewBag.ValueSelected
}
}
UPDATE:プロット増粘剤
私は、クエリ文字列を経由して、それを渡すことができるように、期間中に取るようにindexアクションを有線。値がクエリ文字列を介して渡されない場合Duration.cshtml
Model.Equals(.50F)
レポートTRUE
をデバッグするとき、私は/Home/Index?duration=.5
何も選択されていないクエリ文字列に移動した場合
@Html.RadioButton("", Model, Model.Equals(1.0F), new { id = "radbtnOneDay4" })
、しかし:それは以下のラジオボタンを選択します。だから私はこのラジオボタンが選択されると期待しています:
@Html.RadioButton("", Model, Model.Equals(.50F), new { id = "radbtnHalfDay4" })
これはクレイジーではありませんか?なぜこのラジオボタンをチェックしていないのですか?これはバグですか?浮動小数点数を扱うために追加できるカスタムモデルバインダーはありますか?
UPDATE 2
クエリ文字列パラメータduration
は、モデル名と一致し、クエリ文字列は、モデルの値をオーバーライドしています。
パラメータをdur
に変更したところ、正常に動作しました。次のURLを使用すると、ViewModelの値が使用されます。 /Home/Index?dur=.5
これの背後には確固たる理由があることはわかっていますが、これは怒っています。
わかりませんメインビューで直接表示 –
プロットが太くなっている:モデルヘルパーがHTMLのヘルパーがモデル値に使用するものと、デバッガが表示するものが異なることがあります。詳細については、http://stackoverflow.com/questions/1775170/asp-net-mvc-modelstate-clearを参照してください。 – Pitchmatt