私は望ましい結果を得るために成功したものの、私は私のアプローチに疑問を持って、MVCのチェックボックスのリストを実装しています:Asp.Net MVCのチェックボックスリスト
public class AdditionalServicesModel
{
public IList<SelectListItem> AdditionalServices { get; set; }
}
======= ========================================== ================
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
AdditionalServicesModel objAdditionalServicesModel = new AdditionalServicesModel();
List<SelectListItem> services = new List<SelectListItem>();
services.Add(new SelectListItem { Text = "service-1", Value = "1", Selected=false });
services.Add(new SelectListItem { Text = "service-2", Value = "2", Selected=false });
services.Add(new SelectListItem { Text = "service-3", Value = "3", Selected=false });
objAdditionalServicesModel.AdditionalServices = services;
return View(objAdditionalServicesModel);
}
[HttpPost]
public ActionResult Index(AdditionalServicesModel result)
{
return RedirectToAction("Thanks", "Home");
}
public ActionResult Thanks()
{
return View();
}
}
=========================== ===========================
@model checkboxes.Models.AdditionalServicesModel
@{
ViewBag.Title = "Index";
Layout = null;
}
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
for (int i = 0; i < Model.AdditionalServices.Count; i++)
{
<ul>
<li>
@Html.CheckBoxFor(m=>Model.AdditionalServices[i].Selected, new { id = "Chk-" + i})
@Html.Label(Model.AdditionalServices[i].Text, new { @for = "Chk-" + i })
@Html.HiddenFor(m => Model.AdditionalServices[i].Text)
@Html.HiddenFor(m=> Model.AdditionalServices[i].Value)
</li>
</ul>
}
<input type="submit" value="POST to Controller" />
}
1)1つのチェックボックスに2つの追加の隠しフィールドを作成する必要があります。 良いアプローチがありますか?私はチェックボックスの値+名前を送信するだけで、この長い道のりをすべてするのは間違っているように感じます.JSA経由で値を収集して送信する方がはるかに簡単ですが、妥当性は確認されません。
2)選択したボックスのみを送信する必要がある間は、すべてのチェックボックスを送信します。 フォームの投稿でそれを行う方法はありますか?
検証を使用することができます。選択したオプションをサーバーに送り返す前に、フォームオブジェクトでvalidateを呼び出すだけで済みます。 – ps2goat
あなたはクライアントとサーバーの両方で機能する控えめな検証を意味しましたか?あなたは私のための例がありますか? – Alex
返信するプロパティのみを持つ2番目のモデルを作成しない限り、部分的なデータのみを返信する場合、同じ検証を使用することはできません。あなたはモデルを同期させておく必要があるので、そうするのは少し毛深いでしょう。 1つのモデルを使用して、すべてのデータをポストすることは、そのリンクのパート2であるモデルでDataAnnotationsを使用して、両方の場所で検証できます。 DataAnnotationsは控えめなjavascriptで使用され、Datastate.IsValid()関数があり、データがどこにポストされるのかを呼び出します。 – ps2goat