下面给出的代码向控制器发送ajax请求。
if (btid === '01') {
var allData = {
"sessionName": $('#sessionname').val(),
"foundStudent": $('#studentId').val(),
"code":btid
}
var mySession = JSON.stringify(allData);
$.ajax({
type: "POST",
url: '@Url.Action("RenderView", "ManualFeesCollection")',
contentType: "application/json; charset=utf-8",
data: mySession,
success: function (data) {
$('#maindiv').html('')
$('#maindiv').html(data)
$.each(data.myMonths, function (index, item) {
//Here I want to access myMonths as Json
})
},
})
以下是Controller Action。
public ActionResult RenderView(int code,long foundStudent,int sessionName)
{
var months = //get some months
var myMonths= (from w in months
select new
{
w.Month
});// Want access this data in ajax success function
return PartialView("MonthwiseFees",myMonths);
}
但问题是我在#maindiv中获得了观点,但没有得到
作为json,在ajax的成功函数中。我需要用那些myMonth来做一些事情。目前我发送两个ajax请求(在另一个成功的时候)来完成。但是我希望我能用一个ajax请求来做。感谢花时间在我的问题上。< / p>myMonths
Update1:部分视图代码
{
<tr>
<td>
@x
</td>
<td>
@months[no]
</td>
<td>
@Html.CheckBox(" " + @x, new { @class="check",id="check"})
@Html.Label(" ", new { @class="lbl"})
</td>
</tr>
x = x + 1;
}
<input type="button" class="mybutton btn btn-small btn-primary" value="Show >"/>
</div>
<div class="span7" id="classwiseheads">
</div>
</div>
答案 0 :(得分:2)
您无法针对单个请求发送text/html
和application/json
。你可以发一个。
如果从控制器返回PartialView,则内容类型将设置为text/html
。但是你仍然可以将JSON渲染为局部视图的一部分。
public ActionResult RenderView(int code,long foundStudent,int sessionName)
{
var months = //get some months
var myMonths= (from w in months
select new
{
w.Month
});
ViewBag.Months=myMonths;
return PartialView("MonthwiseFees");
}
然后在你的局部视图中
<script>
var myJSArray=@Html.Raw(JSON.Encode(ViewBag.Months)
</script>
的jQuery
success: function(data) {
$('#maindiv').html('')
$('#maindiv').html(data)
$.each(myJSArray, function(index, item) {
//myJSArray will be available in window scope now
})
}
更新:基于更新的问题
控制器
public ActionResult RenderView(int code,long foundStudent,int sessionName)
{
var months = //get some months
var myMonths= (from w in months
select new
{
w.Month
});
return PartialView("MonthwiseFees",myMonths);
}
当我为Html.CheckBox传递true
时,这将检查所有复选框。这需要使用模型和月份数组来确定
@model List<string>
@using System.Globalization;
@{
Layout = null;
string[] months =DateTimeFormatInfo.CurrentInfo.MonthNames;
var countMonths=months.Count();
int x = 1;
}
<div>
@for (int no=0;no<countMonths-1;no++)
{
<tr>
<td>
@x
</td>
<td>
@months[no]
</td>
<td>
//determine true/false by comparing months and Model
@Html.CheckBox(" " + @x, model.Contains(months[x]), new { @class="check",id="check"})
</td>
</tr>
x = x + 1;
}
</div>
的的jQuery 强> 的
success: function(data) {
$('#maindiv').html('');
$('#maindiv').html(data);
}
答案 1 :(得分:1)
让我们从您的以下代码开始
var myMonths= (from w in months
select new
{
w.Month
});
这里我假设你的myMonths充满了整数列表。我建议在上面的代码中添加.ToList();
。现在它变成了:
var myMonths= (from w in months
select new
{
w.Month
}).ToList();
现在让我们检查你的jquery代码,你的ajax成功方法看起来像这样
success: function(data) {
$('#maindiv').html('')
$('#maindiv').html(data)
$.each(data.myMonths, function(index, item) {
//Here I want to access myMonths as Json
})
}
在这里你写$('#maindiv').html(data)
,这里的数据是整数的集合(月的集合),。html()不会那样工作。
现在,因为您正在使用此ajax调用来仅获取JSON值。我没有看到为此返回部分视图的必要性。您的行动中的退货声明可能如下所示:
return Json(myMonths, JsonRequestBehavior.AllowGet);
现在当您使用以下jquery时,您将能够根据需要每个月访问:
$.each(data, function(index, item) {
// here is your month in the 'item' variable.
$('#maindiv').html(item)
})
我看到您正在尝试使用ajax调用加载部分视图,然后还使用该ajax调用中返回的数据。
为什么不使用@Html.Partial
或@Html.Action
(how to)加载部分视图。理想情况下,部分视图应该调用您的操作,返回JSON数据,然后您可以相应地使用它。
您的最新评论说
一页加载我不需要该视图。我需要点击某个按钮上的视图。
答案 2 :(得分:0)
感谢Murali Murugesan和yasser寻求帮助
我使用了Murali Murugesan的概念,通过在ViewBag.But中发送必要的数据,因为我的部分视图是Not Strongly Typed
,因此我需要使用javascript。
我编辑了我的控制器Action,如下所示
var months = fcDetailsService.GetStudentWiseCollectionDetail(foundStudent, sessionName, "01");
var data = (from w in months
select new
{
w.Month
});
ViewBag.Months = JsonConvert.SerializeObject(data);
if (data != null)
{
return PartialView("MonthwiseFees", data);
}
else
return Json("MonthwiseFees");
然后在我的javascript中,我在下面做了
$(function () {
var i = 0;
var myarray = new Array();
myarray =@Html.Raw(@ViewBag.Months)
$('.check').each(function () {
for (var x = 0; x < myarray.length; x++)
{
var me = (JSON.stringify(myarray[x].Month))
if ($.trim(this.name) === $.trim(me)) {
$(this).prop("checked", true)
$(this).attr("disabled", true)
return true;
}
}
});
});