首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据下拉选择填写表单(MVC 4)

根据下拉选择填写表单(MVC 4)
EN

Stack Overflow用户
提问于 2012-12-27 05:01:50
回答 2查看 6K关注 0票数 4

我使用的是asp.net MVC4,有没有办法根据用户的选择来更新表单?

(在这种情况下,如果从下拉列表中选择了某些内容,我希望填写地址字段,否则需要键入新地址)

我的模型:公共类NewCompanyModel {

代码语言:javascript
复制
    [Required]
    public string CompanyName { get; set; }
    public bool IsSameDayRequired { get; set; }

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

查看:

代码语言:javascript
复制
@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>

和控制器:

代码语言:javascript
复制
 public ActionResult Address(string value)
    {
      //get the address from db and somehow update the view
    }

问题是,你如何更新'model.RegisterOfficeAddress.StreetName‘等,以明确这只是表单的一部分,所以我还不能提交它。

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-04 19:00:46

感谢您的帮助;我决定采取一种不同的方法:在下拉列表更改中,我提交表单:

代码语言:javascript
复制
<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>

然后在控制器中:

代码语言:javascript
复制
  [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所做的所有更改都会被视图中的值覆盖)。

票数 2
EN

Stack Overflow用户

发布于 2012-12-27 05:14:38

在这种情况下,常见的方法是通过javascript更新其他字段:

代码语言:javascript
复制
$('#@Html.IdFor(model => model.AddressID)').on('change',function(){
  $.get(...,function(data){
    $('#@Html.IdFor(model => model.RegisterOfficeAddress.BuildingNameOrNumber)').val(data)
  })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14046224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档