Asp.net mvc 4 如何将下拉列表和文本框链接到我的型号';谁的数据?

Asp.net mvc 4 如何将下拉列表和文本框链接到我的型号';谁的数据?,asp.net-mvc-4,html.dropdownlistfor,Asp.net Mvc 4,Html.dropdownlistfor,这是我的模型的代码。ListBuilder.DropDown是一个常见函数类的一部分,当提供将在数据库上调用的存储过程的字符串名称时,它只返回一个列表 try语句中有一些更共享的公共类代码(与存储过程相关),但该实现与我遇到的问题无关。数据已成功检索并存储到模型中 public class PositionViewModel { [Display(Name = "Series")] public string series { get; set; } public int

这是我的模型的代码。ListBuilder.DropDown是一个常见函数类的一部分,当提供将在数据库上调用的存储过程的字符串名称时,它只返回一个列表

try语句中有一些更共享的公共类代码(与存储过程相关),但该实现与我遇到的问题无关。数据已成功检索并存储到模型中

public class PositionViewModel
{
    [Display(Name = "Series")]
    public string series { get; set; }
    public int seriesID { get; set; }
    public List<SelectListItem> list_Series { get; set; }
}

public PositionViewModel(string id)
{
    Get(id);
    this.list_Series = ListBuilder.DropDown(AppConstants.StoredProc_GetSeries);
}


public Position Get(string id)
{
    ExecStoredProcedure sp = null;
    DataTable dt = new DataTable();

    try
    {
        sp = new ExecStoredProcedure(AppConstants.SP_POSITION_GET, new ConnectionManager().GetConnection(), AppConstants.SP_POSITION_GET);
        sp.SPAddParm("@PD_ID", SqlDbType.Char, id, ParameterDirection.Input);

        dt = sp.SPselect();

        if (dt.Rows.Count > 0)
        {
            this.pd_id = dt.Rows[0]["PD_ID"].ToString();
            this.official_title = dt.Rows[0]["label"].ToString();
            this.series = dt.Rows[0]["Series"].ToString();
            this.grade = dt.Rows[0]["Grade"].ToString(); 
            this.PDType = dt.Rows[0]["PDType"].ToString();
        }
    }

    catch (Exception ex)
    {
        throw ex;
    }

    finally
    {
        sp.dbConnection.Close();
    }

    return this;

}
这是我的观点的代码。我想要的是一个包含model.seriesID(序列号)的下拉列表,但是当用户选择一个项目时,它会用model.series(序列名称)更新文本框

@model Project.Models.PositionViewModel
@{
ViewBag.Title=“编辑职位描述”;
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@LabelFor(model=>model.series)
@DropDownListFor(model=>model.seriesID,model.list_Series,新的{style=“width:550px”})
@Html.ValidationMessageFor(model=>model.seriesID)
@Html.TextBoxFor(model=>model.series,新的{style=“width:250px;”})
@Html.ValidationMessageFor(model=>model.series)
}


我无法将dropdownlist与文本框链接。我需要某种改变事件吗?提前感谢您的帮助。

您的解决方案包括将字符串传递到视图模型的构造函数中。然而,在post上,模型绑定器将无法用无参数构造函数以外的任何东西实例化视图模型。这是视图模型不应该处理数据存储访问之类的事情的部分原因,但不是唯一原因。这是控制器的工作

在视图模型上,将列表属性保留为自动实现的属性,然后在控制器调用<代码>ListBuilder.DropDown中,此时您可以使用模型中的数据调用它

[HttpGet]
public ActionResult PositionEdit(string id)
{
    PositionViewModel model = new PositionViewModel(id);
    return View("PositionEdit", model);
}

[HttpPost]  
public ActionResult PositionEdit(PositionViewModel model)
{
    if (ModelState.IsValid)
    {
        int rc = model.Update();
        return RedirectToAction("PositionView");
    }
    else
    {
        return View("PositionEdit", model);
    }
}
@model Project.Models.PositionViewModel


@{
    ViewBag.Title = "Edit Position Description";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)



    <div class="editor-label">
        @Html.LabelFor(model => model.series)
    </div>


    <div class="editor-field">
        @Html.DropDownListFor(model => Model.seriesID, Model.list_Series, new { style = "width:550px" })
        @Html.ValidationMessageFor(model => Model.seriesID)
    </div>


    <div class="editor-field">
        @Html.TextBoxFor(model => model.series, new { style = "width:250px;" })
        @Html.ValidationMessageFor(model => model.series)
    </div>



    <div class="toppad20">
        <input type="submit" value="Save" />
    </div>