2016-09-28 68 views
0

我正在寫一個asp.Net MVC應用程序,我有一個問題。我需要兩個控件 - 一個是DropDownList,另一個是Button。DropDownList項目

剃刀/ 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操作方法的代碼期待buildingGuidcompanyGuid,你需要在形式保留這些也讓表單提交時會被映射到方法的參數。您可以將其保存在隱藏的輸入字段中。

@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

編輯並顯示整個結構,對於ealier感到抱歉; P – Pasterz

+0

答案應該仍然有效。 – Shyju

+0

參數字典中的方法'System.Web.Mvc.ActionResult Assign(System.Guid,System.Guid,System.Guid)'中的參數'UnassignedParkingSpaces'的非空類型'System.Guid' Web.Controllers.CompanyController' - 這種類型的錯誤; p – Pasterz