2013-09-08 4 views
1

У меня есть пример приложения в Asp.Net MVC 4. Я не нашел способ получить выбранный id из помощника DropDownListFor и назначить его как параметр ActionLink.DropDownListFor в Asp.Net MVC 4

Вот мои модели:

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; } 
} 

Вот метод Edit, где я хочу, чтобы получить выбранный 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> 
} 

Что является лучшим способом сделать это? Спасибо.

Примечание: идентификатор idBanco = 10 установлен для проверки работы ActionLink. Я знаю, что это значение должно быть из DropDownListfor.

+0

http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx –

ответ

0

С помощью jquery вы можете сделать это легко.

Во-первых, добавить идентификатор к вашему ActionLink:

@Html.ActionLink("RegisterModules", "Home", new { idempresa =5, idbanco = 10 }, new { id = "myLink" }) 

Теперь добавить сценарий к вашему мнению (я предпочел бы добавить его в яваскрипта файл и связать файл и добавить к этой странице):

<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> 

И убедитесь, что на эту страницу добавлен jquery. И все готово!

+0

Спасибо за ваш ответ. Возможно без javascript? – Fabian

+0

Вы должны изменить значение на стороне клиента. Извините, я не думаю, что у вас есть выбор, если вы не хотите публиковать форму (в этом случае в опубликованной модели вы найдете выбранное значение). – afzalulh

+0

Хорошо, единственный вариант в этом сценарии - опубликовать форму или использовать javascript, чтобы узнать выбранный вариант в DropDownListFor? – Fabian