4

asp.net mvc 4 を使用しています。ユーザーの選択に基づいてフォームを更新する方法はありますか?

(この場合、ドロップダウン リストから何かを選択した場合は住所フィールドに入力します。それ以外の場合は、新しい住所を入力する必要があります)

私のモデル: public class NewCompanyModel {

    [Required]
    public string CompanyName { get; set; }
    public bool IsSameDayRequired { get; set; }

    public int AddressID { get; set; }
    public Address RegisterOfficeAddress { get; set; }
}

意見:

@model ViewModels.NewCompanyModel


@using (Html.BeginForm(null, null, FormMethod.Post, new { name = "frm", id = "frm" }))
{
@Html.ValidationSummary(true)

<fieldset id="test">
    <legend>Company</legend>


        <h2>Register office address</h2>

        <div class="editor-label">
            @Html.LabelFor(model => model.AddressID)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.AddressID, (IList<SelectListItem>)ViewBag.Addresses, new {id = "address", onchange = "window.location.href='/wizard/Address?value=' + this.value;" })
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.RegisterOfficeAddress.BuildingNameOrNumber)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.RegisterOfficeAddress.BuildingNameOrNumber)
            @Html.ValidationMessageFor(model => model.RegisterOfficeAddress.BuildingNameOrNumber)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.RegisterOfficeAddress.StreetName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.RegisterOfficeAddress.StreetName)
            @Html.ValidationMessageFor(model => model.RegisterOfficeAddress.StreetName)
        </div>

およびコントローラー:

 public ActionResult Address(string value)
    {
      //get the address from db and somehow update the view
    }

問題は、「model.RegisterOfficeAddress.StreetName」などをどのように更新するかです。明確にするために、これはフォームの一部にすぎないため、まだ送信できません。

どうもありがとう

4

2 に答える 2

2

ご協力いただきありがとうございます; 別のアプローチを取ることにしました。ドロップダウンの変更時に、フォームを送信します。

<div class="editor-label">
        @Html.LabelFor(model => model.ServiceAddress.AddressID)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.ServiceAddress.AddressID, (IEnumerable<SelectListItem>)ViewBag.Addresses, new { onchange = "this.form.submit();" })
        @Html.ValidationMessageFor(model => model.ServiceAddress.AddressID)
    </div>

そしてコントローラーで:

  [HttpPost]
        public ActionResult NewDirector(NewDirectorVM vm, string value)
        {
            ModelState.Clear();
            if (vm.ServiceAddress.AddressID > 0)
            {
               //Updates the properties of the viewModel
               vm.ServiceAddress = _Repository.GetAddress(vm.ServiceAddress.AddressID);
            }
   return View("NewDirector", vm);
}

これにより、実際にビューをコントローラーから更新できることに注意してくださいModelState.Clear();(そうでない場合、コントローラーによってviewModelに加えられたすべての変更は、ビューの値によって上書きされます)。

于 2013-01-04T11:00:46.403 に答える