发送一个Javascript数组到控制器,并在另一个URL中呈现视图结果
本文关键字:URL 另一个 结果 视图 控制器 一个 数组 Javascript | 更新日期: 2023-09-27 18:09:18
我已经尝试了4天没有成功了,我是一个初级开发人员,所以这就是为什么。
背景:
我有一个灵活的网格,我显示从数据库中收集的数据,在一个非常特殊的列,有一个复选框,我创建一个javascript函数,得到实体Id当你点击复选框并将其存储在javascript数组,我想发送到ActionResult。
问题:
我可以通过使用Ajax,但我不能渲染ActionResult视图,我得到404。试图使用@Html.ActionLink
,但不识别javascript数组。那么,如何将javascript数组发送到控制器并遵循控制器流程,例如用另一个URL呈现另一个视图呢?
Javascript数组:
var arrayId = new Array();
视图:
<a href="@Url.Action("SomeAction", "SomeController", new { area = "SomeArea", arrayId = arrayId })">
控制器:
public ActionResult SomeAction(object[] arrayId) { //some code return View("AnotherView"); }
解决方法:
Ajax,如果我可以在另一个URL中呈现视图
HTML的& lt;
或c# Helper,可能将javascript数组传递给视图模型,但我不知道如何。
PartialView吗?
我相信你可能有一点困惑。在ASP。. NET MVC,任何接收请求,无论是来自AJAX还是完整的请求,都是动作。该操作的结果,如JSON响应或完整页面的结果,是一个ActionResult。…我想发送给ActionResult。
总是把它想象成请求>响应。请求是由操作处理的,响应是操作输出的。
现在,回答你的问题。将此页面视为从DB输出id的第一个页面:<form method="post" action="/home/someaction">
<ul>
<li><label><input type="checkbox" name="arrayId" value="1" />1</label></li>
<li><label><input type="checkbox" name="arrayId" value="2" />2</label></li>
<li><label><input type="checkbox" name="arrayId" value="3" />3</label></li>
<li><label><input type="checkbox" name="arrayId" value="4" />4</label></li>
</ul>
<button>Post array to action SomeAction</button>
</form>
<script type="text/javascript">
$(function(){
$('form').on('submit', function () {
$('checkbox:checked').each(function (ix, el) {
$(el).attr('name', 'arrayId[' + ix + ']');
});
});
});
</script>
让我们看看这里发生了什么:
- 对于从DB返回的每个项目,我们有一个复选框。注意名称 attr,这很重要
- 所有东西都在指向第二个动作的表单中。它将接收数组 当提交表单时,我们遍历每个选中的复选框以将名称更改为
arrayId[0]
之类的内容。这是必需的。ASP。NET使用名称attr将接收到的数据绑定到操作期望的数据。如果它是一个集合(如列表或数组),则名称还必须包含一个基于0的索引器。这就是我们在发布表单之前所做的。将接收这篇文章的操作看起来像:
[HttpPost]
public ActionResult SomeAction(string[] arrayId)
{
return View(arrayId);
}
通过ajax向服务器发送数据是个好主意,但问题是如何响应用户。一种解决方案是将用户重定向到另一个页面,或者用适当的更改刷新当前页面。这样你就可以使用JavascriptResult了。
return JavaScript("window.location = 'http://www.domain.com/...'");
或
return JavaScript("location.reload(true)");