我在asp.net mvc上有一些应用程序。 我正在尝试创建表过滤器。页面非常难,所以我无法从JSON响应中获取数据。我试图通过使用params的呼叫操作来获取它。
function refresh() {
var id = $("#list").val();
var params = { id: id };
$.get("/Home/Index", params, null, "json");
}
<select id="list" onchange="refresh()">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<%foreach (var i in (IEnumerable<int>)ViewData["list"])
{ %>
<%=i %><br />
<%} %>
public ActionResult Index(int? id)
{
if (id == null)
id = 0;
ViewData["list"] = Enumerable.Range((int)id, 5).Select(i => i).ToList<int>();
return View();
}
但我没有看到新数据。怎么了? 我如何刷新页面?
PS我知道我想从行动A到行动A(带有参数)去(重定向)。我不想在客户端重建页面
答案 0 :(得分:5)
您没有对通过get
电话检索的结果做任何事情。此外,由于您要返回视图,因此应将数据类型设置为html
。
$.get('/Home/Index', params, function(html) {
$('body').html(html);
},'html');
我注意到我可能只会替换更新的部分。您可以通过使用部分视图来保存该部分,然后当您通过AJAX获取请求时,您只能返回部分视图而不是完整视图。我要做的另一件事是将视图强类型化为IEnumerable<int>
并传递模型,而不是使用视图数据。
查看
<script type="text/javascript">
$(function() {
$('#list').change( function() {
var id = $("#list").val();
var params = { id: id };
$.get("/Home/Index", params, function(html) {
$('#listResults').replaceWith(html)
}, "html");
});
});
</script>
<select id="list">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<% Html.RenderPartial( "ListResults" ); %>
部分视图
<div id="listResults">
<%foreach (var i in Model)
{ %>
<%=i %><br />
<%} %>
</div>
动作
public ActionResult Index(int? id)
{
if (id == null)
id = 0;
var model = Enumerable.Range((int)id, 5).Select(i => i).ToList<int>();
if (this.Request.IsAjaxRequest())
{
return PartialView(model);
}
return View(model);
}
答案 1 :(得分:1)
我在上面的代码中看到一个问题:
当您的请求完成后,$.get()
无法执行任何操作(您的数据已从服务器获取)
您应该传入一个带有参数的函数,而不是传递null。例如:
$.get("/Home/Index"
, params,
function(data){
//do something with data.
//data is json object returned
}, "json");
在此功能中,您实际上可以将过滤器应用于表