C# 如何在asp.net mvc中使用jquery将html选择标记(下拉)值传递给控制器?
我在mvc应用程序中使用C# 如何在asp.net mvc中使用jquery将html选择标记(下拉)值传递给控制器?,c#,asp.net-mvc,select,C#,Asp.net Mvc,Select,我在mvc应用程序中使用.Split()方法从一系列字符串数组生成了一个选项,如下所示: @{ var ava = Model.AvailableSizes.Split(',').ToList(); } <select class="form-control input-sm"> <option>Select Size</option> @foreach (var item in ava) {
.Split()
方法从一系列字符串数组生成了一个
选项,如下所示:
@{
var ava = Model.AvailableSizes.Split(',').ToList();
}
<select class="form-control input-sm">
<option>Select Size</option>
@foreach (var item in ava)
{
<option>@item</option>
}
</select>
public ViewResult ProductDetails(int productId)
{
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
怎么可能呢?谢谢你抽出时间。
编辑:@Stephen我使用存储库而不是视图模型,如下所示:
@{
var ava = Model.AvailableSizes.Split(',').ToList();
}
<select class="form-control input-sm">
<option>Select Size</option>
@foreach (var item in ava)
{
<option>@item</option>
}
</select>
public ViewResult ProductDetails(int productId)
{
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
那我该怎么处理呢?
Edit2:@Stephen
以下是购物车索引方法:
public ViewResult Index(Cart cart, string returnUrl)
{
ViewBag.Message = "Dude, This gonna make it";
return View(new CartIndexViewModel
{
ReturnUrl = returnUrl,
Cart = cart
});
}
您的
元素没有名称
属性,因此表单不会提交名称/值对。您可以使用
<select name="productId" class="form-control input-sm">
在控制器中
[HttpGet]
public ViewResult ProductDetails(int productId)
{
Product product = repository.Products.FirstOrDefault(p => p.ProductID == productId);
string[] sizes = product.AvailableSizes.Split(',');
ProductVM model = new ProductVM()
{
ID = product.ProductId,
Name = product.Name
AvailableSizes = new SelectList(sizes),
ReturnUrl = ....
};
return View(model);
}
在我看来
@model ProductVM
....
@using (Html.BeginForm())
{
....
@Html.LabelFor(m => m.SelectedSize)
@Html.DropDownListFor(m => m.SelectedSize, Model.AvailableSizes, "Select Size", new { @class="form-control input-sm" }))
@Html.ValidationMessageFor(m => m.SelectedSize)
最后在POST方法中,包括视图模型的参数
[HttpPost]
public ActionResult AddToCart(Cart cart, ProductVM model)
而
model.ProductID
的值将是所选的值。还请注意,您应该检查ModelState.IsValid的值,如果没有,请重新填充SelectList
并返回视图。在AddToCart方法中,获取下拉列表的值int selectedValue=Request.Form[“input sm”].AsInt()
当然可以-@Html.DropDownListFor(m=>m.yourProperty,Model.yourSelectList,“选择大小”,new{@class=“form control input sm”})
。和代码,例如var ava=Model.AvailableSizes.Split(',').ToList()
属于控制器,而不是视图。请给我30分钟时间。productId
是您尝试绑定到的属性还是其他值?是。您希望将所选大小绑定到的模型中的属性是什么?您又说了2条注释,不是:)当我将此public string AvailableSizes{get;set;}
更改为public IEnumerable AvailableSizes{get;set;}
时,在我的模型中,我得到一个错误,即错误3 Assembly'Ozhay.Domain,Version=1.0.0,Culture=neutral,PublicKeyToken=null“使用”System.Web.Mvc,版本=5.2.3.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”,其版本高于引用的程序集“System.Web.Mvc,版本=5.2.2.0,区域性=neutral,PublicKeyToken=31bf3856ad364e35'c:\Users\Naser Dostdar\Documents\Visual Studio 2013\Projects\Ozhay\Ozhay.Domain\bin\Debug\Ozhay.Domain.dll Ozhay.webui首先,您是否在视图模型(而不是数据模型)中执行此操作。其次,该错误与web.config.cs
文件中使用的版本不正确有关(在其中的某个地方,您有冲突的版本-Version=5.2.2.0
不等于Version=5.2.3.0
)。如果你无法解决问题,那么你需要问一个新问题,显示错误消息和你的web.config
文件的内容,因为这将在你的应用程序的其他地方引起其他问题。Stephen我更新了我遇到的问题,这类问题没有引起注意,你能看一下吗?非常需要您的帮助,谢谢您编辑中的代码将很好地工作,尽管它的做法很糟糕。您只需将SelectList
作为ViewBag
属性传递,并将视图更改为@Html.DropDownListFor(m=>m.ProductID,(IEnumerable)ViewBag.AvailableSizes,
。但为什么不想正确执行此操作并将数据模型映射到视图模型?我的最佳猜测是,您有一个视图来选择产品(下拉列表?)并为该产品选择尺寸?