Asp.net mvc Asp.NETMVC4中的DropDownListFor

Asp.net mvc Asp.NETMVC4中的DropDownListFor,asp.net-mvc,dropdownlistfor,Asp.net Mvc,Dropdownlistfor,我有一个Asp.NETMVC4中的示例应用程序。我找不到从DropDownListFor帮助程序获取所选id并将其作为参数分配给ActionLink的方法 这是我的模型: public class EmpresaLibroViewModel { //property a usar en vista Index ya que son iterables public IEnumerable<EmpresaModel> Empresas { get; set; }

我有一个Asp.NETMVC4中的示例应用程序。我找不到从DropDownListFor帮助程序获取所选id并将其作为参数分配给ActionLink的方法

这是我的模型:

public class EmpresaLibroViewModel
{
    //property a usar en vista Index ya que son iterables
    public IEnumerable<EmpresaModel> Empresas { get; set; }
    public IEnumerable<BancoModel> Bancos { get; set; }
    public IEnumerable<LibroModel> Libros { get; set; }

    //property que van a contener solo un registro (para Detalles, Editar)
    public EmpresaModel Empresa { get; set; }
    public BancoModel Banco { get; set; }
    public LibroModel Libro { get; set; }
}
公共类EmpresaLibroViewModel
{
//房地产a usar en vista索引可扩展性
公共IEnumerable Empresas{get;set;}
公共IEnumerable Bancos{get;set;}
公共IEnumerable Libros{get;set;}
//财产(第二部分,编辑)
公共Empresa模型Empresa{get;set;}
公共bancomodelbanco{get;set;}
公共LibroModel Libro{get;set;}
}
以下是编辑方法,我希望在其中获取选定的Banco ID并将其作为参数发送到ActionLink:

@model MvcApplication1.ViewModels.EmpresaLibroViewModel

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm())
{


   @Html.ValidationSummary(true)

<fieldset>
    <legend>EmpresaModel</legend>

    @Html.HiddenFor(model => model.Empresa.EmpresaModelID)

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

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

    <h3>Tiene libros en:</h3>
    <table>
            @foreach (var unitem in Model.Libros)
            {
            <tr>
                <td>
                    @unitem.Bancos.Nombre (empresa:@unitem.EmpresaModelID - banco:@unitem.BancoModelID)
                    @Html.ActionLink("(eliminar)", "DesvincularBanco", new { id = unitem.LibroModelID, idEmp = unitem.EmpresaModelID })
                </td>
            </tr>
            }
    </table>
    <h3>Agregar:</h3>
    @Html.DropDownListFor( model => model.Banco.BancoModelID , new SelectList(Model.Bancos, "BancoModelID", "Nombre")))
    @Html.ActionLink("(agregarlo)", "VincularBanco", new { idempresa=Model.Empresa.EmpresaModelID , idbanco=10 }  )

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
}
@model mvcapapplication1.ViewModels.EmpresaLibroViewModel
@{
ViewBag.Title=“编辑”;
}
编辑
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true)
经营模式
@Html.HiddenFor(model=>model.Empresa.EmpresaModelID)
@LabelFor(model=>model.Empresa.Nombre)
@EditorFor(model=>model.Empresa.Nombre)
@ValidationMessageFor(model=>model.Empresa.Nombre)
@LabelFor(model=>model.Empresa.Cuit)
@EditorFor(model=>model.Empresa.Cuit)
@Html.ValidationMessageFor(model=>model.Empresa.Cuit)
Tiene libros en:
@foreach(Model.Libros中的var unitem)
{
@unitem.Bancos.Nombre(empresa:@unitem.EmpresaModelID-banco:@unitem.BancoModelID)
@ActionLink(“(eliminar)”,“DesvincularBanco”,新的{id=unitem.LibroModelID,idEmp=unitem.EmpresaModelID})
}
阿格雷加:
@DropDownListFor(model=>model.Banco.bancomodel,新选择列表(model.Bancos,“bancomodel”,“Nombre”))
@ActionLink(“(agregarlo)”,“VincularBanco”,新的{idempresa=Model.Empresa.EmpresaModelID,idbanco=10})

}
最好的方法是什么? 谢谢


注意:idBanco=10已设置为验证是否正在使用ActionLink。我知道该值必须来自DropDownListfor。

在jquery的帮助下,您可以轻松地完成此操作

首先,向actionlink添加一个id:

@Html.ActionLink("RegisterModules", "Home", new { idempresa =5, idbanco = 10 }, new { id = "myLink" })
现在将脚本添加到您的视图中(我更愿意将其添加到javascript文件中,并将该文件打包并添加到此页面):


$(文档).ready(函数(){
$('select[id*=“Banco”]”)。更改(函数(){
var lnk=$('#myLink').attr('href');
var givenval=$('select[id*=“Banco”]”)。val();
var result=lnk.split(“idbanco=”)
如果(result.length>1){
lnk=结果[0]+“idbanco=“+givenval;
}
$('#myLink').attr('href',lnk);
});
});

并确保jquery已添加到此页面。你完了

谢谢你的回答。不使用javascript也可以吗?您必须更改客户端的值。很抱歉,我认为您没有任何选择,除非您想发布表单(在这种情况下,在发布的模型中,您将找到选定的值)。好的,该场景中的唯一选项是发布表单或使用javascript了解DropDownListFor中的选定选项?在您的代码中,您使用
发布表单,这是正常的。我不建议改变它。对于重定向或任何客户端操作,使用javascript、jquery和ajax在MVC中是正常的。
<script type="text/javascript">
    $(document).ready(function () {
        $('select[id*="Banco"]').change(function () {
            var lnk = $('#myLink').attr('href');
            var givenval = $('select[id*="Banco"]').val();
            var result = lnk.split("idbanco=")

            if (result.length > 1) {
                lnk = result[0] + "idbanco=" + givenval;
            }

            $('#myLink').attr('href', lnk);
        });

    });
</script>