2016-09-28 4 views
0

Я пишу приложение asp.Net MVC, и у меня есть проблема. Мне нужно два элемента управления: один - DropDownList, а другой - Button.DropDownList item

Бритва/Html:

<h3 class="text-center margin">Parking Spaces in <strong>@Model.Company.Name</strong></h3> 

@Html.DropDownListFor(r => r.UnassignedParkingSpaces, new SelectList(Model.UnassignedParkingSpaces, "Id", "Id"), new { @class = "form-control" }) 
<a class="btn btn-primary btn-block btn-sm button-width" onclick="location.href = '@Url.Action("Assign", "Company", new {buildingGuid = Model.BuildingGuid, companyGuid = Model.Company.Guid, parkingSpaceGuid = })'"> 
<i class="fa fa-exchange"></i> @ResourcesGeneral.AssignButton 
</a> 

CompanyController:

public ActionResult Assign(Guid parkingSpaceGuid, Guid companyGuid, Guid buildingGuid) 
    { 
     var building = _buildingReader.GetBuilding(buildingGuid); 
     building.AssignParkingSpace(parkingSpaceGuid, companyGuid); 

     return RedirectToAction("DisplayParkingSpaces", new { buildingGuid, companyGuid}); 
    } 

Мой ViewController, что я использую в Html:

public class CompanyParkingSpacesViewModel 
{ 
    public Guid BuildingGuid { get; set; } 
    public AllParkingSpacesListViewModel AllParkingSpacesListViewModel { get; set ; } 
    public Company Company { get; set; } 
    public List<ParkingSpace> CompanyParkingSpaces { get; set; } 
    public IEnumerable<ParkingSpace> UnassignedParkingSpaces { get; set; } 
} 

И ParkingSpace Модель:

public class ParkingSpace 
{ 
    public Guid Guid { get;} 
    public string DescriptionHint { get; private set; } 
    public int Id { get; private set; } 
    private ParkingSpaceState State { get; set; } 
} 

Так что мне нужно перейти к элементу кнопки, который я выбрал в DropDownList, у контроллера somy есть все параметры. Как вы можете это сделать?

+0

Да, parkingSpaceGuid =, пусто, потому что мне нужна помощь при заполнении этого поля. – Pasterz

ответ

0

Вам необходимо сохранить свой элемент управления (элемент SELECT) в форме и отправить форму.

Вы также используете метод DropDownListFor. Для показа выпадающего списка вам не нужно использовать коллекцию сущностей ParkingSpace как тип. Вы можете просто использовать тип List<SelectListItem>. Также вам нужно добавить другое свойство для выбранного значения параметра.

public class CompanyParkingSpacesViewModel 
{ 
    public Guid BuildingGuid { get; set; } 
    public AllParkingSpacesListViewModel AllParkingSpacesListViewModel { get; set ; } 
    public Company Company { get; set; } 
    public List<ParkingSpace> CompanyParkingSpaces { get; set; } 
    public IEnumerable<SelectListItem> UnassignedParkingSpaces { get; set; } 
    public Guid SelectedParkingSpace { set;get;} 
} 

Убедитесь, что вы загружаете данные в вашем GET действия

public ActionResult Assign() 
{ 
    var vm = new CompanyParkingSpacesViewModel(); 
    vm.UnassignedParkingSpace = db.ParkingSpaces 
           .Select(x=>new SelectListItem { Value = x.Guid.ToString(), 
                 Text=x.DescriptionHint }).ToList(); 
    //Assign other properties as well 
    vm.Company=new Company(); 
    return View(vm); 
} 

Теперь в вашей форме.

@model CompanyParkingSpacesViewModel 
@using(Hml.BginForm("Assign","YourControllerName")) 
{ 
    <label>Select a parking space </label> 
    @Html.DropDownListFor(r => r.SelectedParkingSpace, 
      Model.UnassignedParkingSpace,new { @class = "form-control" }) 
    <input type="submit" value="Assign" /> 
} 

Убедитесь, что имя параметра метода действия соответствует значению атрибута имени элемента SELECT.

public ActionResult Assign(Guid SelectedParkingSpace, Guid companyGuid, 
                      Guid buildingGuid) 
{ 
    var building = _buildingReader.GetBuilding(buildingGuid); 
    building.AssignParkingSpace(SelectedParkingSpace, companyGuid); 
    return RedirectToAction("DisplayParkingSpaces", new { buildingGuid, companyGuid}); 
} 

С вашей Assign действий коды методы ожидает buildingGuid и companyGuid, вы должны держать те же в форме, так что он будет отображаться в параметры метода, когда форма была отправлена. Вы можете сохранить это в скрытых полях ввода.

@using(Hml.BginForm("Assign","YourControllerName") 
{ 
    <label>Select a parking space </label> 
    @Html.DropDownListFor(r => r.SelectedParkingSpace, 
      Model.UnassignedParkingSpace,new { @class = "form-control" }) 

    <input type="hidden" name="companyGuid" value="@Model.Company.Guid" /> 
    <input type="hidden" name="buildingGuid" value="@Model.BuildingGuid" /> 
    <input type="submit" value="Assign" /> 
} 
+0

Отредактировано и показано целое строение, извините за эльфию; P – Pasterz

+0

Ответ должен по-прежнему работать. – Shyju

+0

Словарь параметров содержит нулевую запись для параметра «UnassignedParkingSpaces» неэлементного типа «System.Guid» для метода «System.Web.Mvc.ActionResult Assign (System.Guid, System.Guid, System.Guid)» в ' Web.Controllers.CompanyController '- этот тип ошибки; p – Pasterz

Смежные вопросы