如何将值从DropDownListFor绑定到我的控制器?

时间:2017-07-04 09:23:00

标签: c# asp.net-mvc razor

我的视图中有一个带静态值的选择控件,我打算让用户选择一个值,它会绑定到我的控制器,这样我就可以在所需的操作方法中使用它。

我的观点 -

@model StockProject.ViewModels.EquityViewModel 
@using (Html.BeginForm(FormMethod.Post)){    

@{
  var selectList = new SelectList(
  new List<SelectListItem>
  {
    new SelectListItem {Text = "BOOKED", Value = "1"},
    new SelectListItem {Text = "EXECUTING", Value = "2"},
    new SelectListItem {Text = "EXECUTED", Value = "3"},
    new SelectListItem {Text = "SUSPENDED", Value = "4"},
    new SelectListItem {Text = "CANCELLED", Value = "5"},
    }, "Value", "Text");
   }
@Html.DropDownListFor(model => model.status, selectList, new { @class = "form-control", name = "status", id = "status" })

<div class="col-md-3 form-group">                        
    <button type="button" class="btn btn-success btn-block form-control" onclick="location.href='@Url.Action("Equity", "Order")'">
         Go
         <i class="fa fa-arrow-circle-right"></i>
    </button>
</div>
}

ViewModel -

public class EquityViewModel
{
    public int CustomerId { get; set; }
    public string status { get; set; }        
    public DateTime startdate { get; set; }
    public DateTime enddate { get; set; }        
    public List<ListEquityOrder> ListOrderEquity { get; set; }

    public EquityViewModel()
    {
        ListOrderEquity = new List<ListEquityOrder>();

    }
}

控制器 -

[HttpGet]
public IActionResult Equity()
{
  var modelview = new EquityViewModel();
  var model = new EquityRequest();

  model.CustomerId = _appSettings.TestCustomerId;
  model.RequestStartPoint = 0;
  model.NoOfRequests = 1000000;
  model.Null = null;
  model.Status = modelview.status; 
  model.StartDate = modelview.StartDate;
  model.EndDate =  modelview.EndDate;
  model.Equity = "EQUITY";

  EquityResponse ListEquityOrders = _genericService.CallSoapAction<EquityResponse, EquityRequest>(model, "findCustomerOrdersBySecurityType");


  List<ListEquityOrder> findCusOrder = new List<ListEquityOrder>();
  foreach (var t in ListEquityOrders.Item)
  {
    ListEquityOrder listOrder = new ListEquityOrder();

    listOrder.BusinessOffice = t.BusinessOffice;
    listOrder.CustomerLabel = t.CustomerLabel;
    listOrder.CustomerName = t.CustomerName;
    listOrder.Exchange = t.Exchange;
    listOrder.FixOrderStatus = t.FixOrderStatus;
    //adding other data values to the list

    findCusOrder.Add(listOrder);
   }
   modelview.ListOrderEquity = findCusOrder;

   return View(modelview);
 }

只要用户点击提交按钮,就不会向控件传递任何值 - DropDownListFor和TexBoxes。我尝试过FormCollection,但这不起作用。请问我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码获取预期输出。

在你的模特中

public enum BookingDetails
    {
        BOOKED = 1, EXECUTING = 2, EXECUTED = 3, SUSPENDED = 4, CANCELLED = 5
    }

    public class SomeModel
    {
        public BookingDetails bookingDetails { get; set; }

        public static IEnumerable<SelectListItem> GetBookingDetailsSelectItems()
        {
            yield return new SelectListItem { Text = "BOOKED", Value = "1" };
            yield return new SelectListItem { Text = "EXECUTING", Value = "2" };
            yield return new SelectListItem { Text = "EXECUTED", Value = "3" };
            yield return new SelectListItem { Text = "SUSPENDED", Value = "4" };
            yield return new SelectListItem { Text = "CANCELLED", Value = "5" };
        }
    }

注意:上述模型仅处理下拉值。如果你想做更多,那么可以自由扩展课程

然后你的控制器应该如下

public class MyController : Controller
    {
        // GET: My
        public ActionResult MyAction()
        {
            // shows your form when you load the page
            return View();
        }

        [HttpPost]
        public ActionResult MyAction(SomeModel model)
        {

            var selectedBookingDetails = model.bookingDetails;// this will be the selected dropdown item text.

            return View(model);
        }
    }

然后查看

@model SomeModel

@using (Html.BeginForm("MyAction", "My", FormMethod.Post))
{
@Html.DropDownListFor(m => m.bookingDetails, SomeModel.GetBookingDetailsSelectItems())
<input type="submit" value="Send" />
}

注意:请包含正确的模型命名空间