1

最後の項目が「新しいライセンス プレート」であるライセンス プレートのドロップダウン リストがあります。デフォルトでは、フォームは新しいナンバー プレート フォーム フィールド (新しいナンバー プレートのテキスト ボックス、およびプレートの州/県の出身地のドロップダウン リスト) を表示しません。

「新しいライセンス プレート」の選択に基づいてフォームを表示するにはどうすればよいですか?

これまでに部分ビューを作成しました。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Namespace.ViewModels.ProfileMemberViewModel>" %>
<table cellspacing="2" cellpadding="2" width="100%" border="0" align="left">
<tr>
    <td>
        <%=Html.LabelFor(model => model.NewLicensePlate.LicensePlate, new { @class = "inputLabel" })%>
    </td>
    <td>
        <%=Html.TextBoxFor(model => model.NewLicensePlate.LicensePlate, new { @class = "inputField" })%>
    </td>
</tr>
<tr>
    <td>
        <%=Html.LabelFor(model => model.NewLicensePlate.PlateState, new { @class = "inputLabel" })%>
    </td>
    <td>
        <%=Html.DropDownListFor(model => model.NewLicensePlate.PlateState, Model.NewLicensePlate.PlateStates, new { @class = "inputField" })%>
    </td>
</tr>

親フォーム:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Paysite.Providers.ViewModels.ProfileMemberViewModel>" %>
<% using (Html.BeginForm("Confirm", "Profile", FormMethod.Post, new { @id = "Profile-form" }))
   {%>
...
<tr>
    <td>
        <%=Html.LabelFor(model => model.Member.LicensePlate, new { @class = "inputLabel" })%>
        <br />
        <br />
        <span class="small">(To add, select "New License Plate")</span>
    </td>
    <td>
        <%=Html.DropDownListFor(model => model.Member.LicensePlate, Model.Member.LicensePlates, new { @class = "inputField" })%>
    </td>
</tr>
</table>
<div id="NewLicensePlate">            
</div>
...
<%
   } %>

親フォームの jQuery:

$("#Member_LicensePlate").change(function () {
  var selectedPlate = $("#Member_LicensePlate").val();
  if (selectedPlate == "New License Plate") {
    $("#NewLicensePlate").load('<%= Url.Action("NewLicensePlate") %>');
  } else {
    $('#NewLicensePlate').empty();
  }
});

ビューモデル:

public class ProfileMemberViewModel
{
    public ExistingMemberViewModel Member { get; set; }
    public NewLicensePlateViewModel NewLicensePlate { get; set; }
}

public class NewLicensePlateViewModel
{
    [Display(Name = "License Plate")]
    public string LicensePlate { get; set; }

    [Display(Name = "Province/State")]
    public string PlateState { get; set; }

    public IEnumerable<SelectListItem> PlateStates { get; set; }
}

コントローラーのアクション:

public ActionResult NewLicensePlate()
{
    var model = new ProfileMemberViewModel();
    model.NewLicensePlate = new NewLicensePlateViewModel();

    DataSet statesDataSet = _statesRepo.GetStates();

    model.NewLicensePlate.PlateStates =
            Enumerable.Select(statesDataSet.Tables[0].AsEnumerable(), x => new SelectListItem
        {
            Text = x.Field<string>("NAME"),
            Value = x.Field<double>("ID").ToString()
        });

    return PartialView("NewLicensePlate", model);
}

から への親から投稿するとpublic ActionResult Confirm(ProfileMemberViewModel model)model.NewLicensePlateバインディングが取得されません。それはnullです。ここで私が間違っていることはありますか?これが最善の方法かどうかはわかりません。

4

1 に答える 1

1

最も簡単な方法は、すべてのフィールドを同じ (親フォーム) に配置することだと思います。新しいプレートのコントロールを非表示にします。JavaScript を使用して、「新しいナンバー プレート」の選択に基づいてそれらを表示します。フォームが投稿されたときに、コントロールが満たされている場合は、新しいライセンス プレートを処理します

于 2012-07-05T09:49:24.710 に答える