Asp.net MVC,在不使用 Ajax 的情况下将数组从视图传递到控制器
Asp.net MVC, Pass Array to Controller From View Without Using Ajax
我正在使用 asp.net mvc 5。我想在不使用 Ajax 的情况下将字符串数组从视图传递到控制器。有人可以帮忙吗?
这个是controller,值在packagelist[]中获取
public ActionResult Create(Business business, string loc, string serv, string[] packagelist)
{
try
{
if (ModelState.IsValid)
{
var a = locationIds;
business.ServiceId = db.Services.Where(x => x.Title ==serv).Select(x => x.Id).SingleOrDefault();
business.LocationId = db.Locations.Where(x => (x.Title + " (" + x.State + "), " + x.PostalCode)==loc).Select(x => x.Id).SingleOrDefault();
db.Businesses.Add(business);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
foreach(var error in ModelState.Values)
{
foreach(var er in error.Errors)
ModelState.AddModelError("", er.Exception.ToString());
}
}
ViewData["Packages"] = db.BusinessPackages.Select(x => new SelectListItem
{
Text = x.Package,
});
return View(business);
}
catch(Exception ex)
{
ModelState.AddModelError("", ex);
return View(business);
}
}
已在视图中创建隐藏输入
<input type="hidden" name="packagelist" id="packagelist" value="" />
然后通过这个函数设置这个隐藏字段的值
$("#theform").submit(function (e) {
e.preventDefault();
var locdiv=$("#maindiv");
var locations = locdiv.children();
var loc = [];
for (var i = 0; i < locations.length; i++)
{
loc.push(locations.eq(i).text());
}
// SaveLocations(loc);
$("#packagelist").val(loc);
$("#theform").submit();
现在的主要问题是,当我通过 Jquery 设置输入值并将其提交给控制器时,控制器将值数组视为单个值。
我想你可以使用 cookie。
在 JS 中,
document.cookie = "CookiesName=" + 值 + ";" + "365;路径=/";
在控制器中,
变量数据 = Request.Cookies["CookiesName"]
要在控制器中接收数组作为参数,您的输入需要特定的命名
<input type="hidden" name="packagelist[0]" id="packagelist_0_" value="" />
<input type="hidden" name="packagelist[1]" id="packagelist_1_" value="" />
<input type="hidden" name="packagelist[2]" id="packagelist_2_" value="" />
...
<input type="hidden" name="packagelist[x]" id="packagelist_x_" value="" />
我正在使用 asp.net mvc 5。我想在不使用 Ajax 的情况下将字符串数组从视图传递到控制器。有人可以帮忙吗?
这个是controller,值在packagelist[]中获取
public ActionResult Create(Business business, string loc, string serv, string[] packagelist)
{
try
{
if (ModelState.IsValid)
{
var a = locationIds;
business.ServiceId = db.Services.Where(x => x.Title ==serv).Select(x => x.Id).SingleOrDefault();
business.LocationId = db.Locations.Where(x => (x.Title + " (" + x.State + "), " + x.PostalCode)==loc).Select(x => x.Id).SingleOrDefault();
db.Businesses.Add(business);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
foreach(var error in ModelState.Values)
{
foreach(var er in error.Errors)
ModelState.AddModelError("", er.Exception.ToString());
}
}
ViewData["Packages"] = db.BusinessPackages.Select(x => new SelectListItem
{
Text = x.Package,
});
return View(business);
}
catch(Exception ex)
{
ModelState.AddModelError("", ex);
return View(business);
}
}
已在视图中创建隐藏输入
<input type="hidden" name="packagelist" id="packagelist" value="" />
然后通过这个函数设置这个隐藏字段的值
$("#theform").submit(function (e) {
e.preventDefault();
var locdiv=$("#maindiv");
var locations = locdiv.children();
var loc = [];
for (var i = 0; i < locations.length; i++)
{
loc.push(locations.eq(i).text());
}
// SaveLocations(loc);
$("#packagelist").val(loc);
$("#theform").submit();
现在的主要问题是,当我通过 Jquery 设置输入值并将其提交给控制器时,控制器将值数组视为单个值。
我想你可以使用 cookie。
在 JS 中, document.cookie = "CookiesName=" + 值 + ";" + "365;路径=/";
在控制器中, 变量数据 = Request.Cookies["CookiesName"]
要在控制器中接收数组作为参数,您的输入需要特定的命名
<input type="hidden" name="packagelist[0]" id="packagelist_0_" value="" />
<input type="hidden" name="packagelist[1]" id="packagelist_1_" value="" />
<input type="hidden" name="packagelist[2]" id="packagelist_2_" value="" />
...
<input type="hidden" name="packagelist[x]" id="packagelist_x_" value="" />