我的controller Action method
如下所示:
[HttpGet]
[Route("ShowModal")]
public Task<IActionResult> GetDetails(int id, string name, IEnumerable<Employee> employees)
{
//create a model
//Some business logic codes
return PartialView("_Partial.cshtml", model);
}
我需要在按下按钮时从jQuery's $.get()
方法调用上面的Action方法,捕获返回为HTML
的部分视图,并在Bootstrap弹出窗口中显示它。
我无法通过IEnumerable<Employee>
方法传递jQuery
,它总是null
,无论我尝试什么。
以下是JS代码:
<a class="btn btn-primary" onclick="ShowModal();" data-keyboard="true" data-toggle="modal">ShowModal</a>
<div class="modal fade" id="divShowModalDialog" role="dialog" tabindex="-1">
<div class="modal-body" id="divShowModalBody">
</div>
</div>
function ShowModal()
{
var list = [{ Id: 101, Gender: 'MALE' }, { Id: 102, Gender: 'FEMALE' }];
list = JSON.stringify(list);
var data = { 'id': 999, 'name': 'JAMES', 'employees': list };
$.get('/Area1/Controller1/ShowModal', data)
.done(function (response) {
if (response != undefined) {
$('#divShowModalBody').html(response);
$('#divShowModalDialog').modal(
{
backdrop: 'static',
keyboard: true,
});
}
})
.fail(function (xhr) {
console.log(xhr);
})
}
我在Action方法中获得id
和name
参数,但列表始终为空。我在删除JSON.stringify()
之后尝试过,但它不起作用。
我知道我错过了一件小事,请帮忙。
答案 0 :(得分:0)
首先,您应该在控制器操作上使用public void changeLocale()
{
Resources res = getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("hi_IN");
res.updateConfiguration(conf, dm);
setContentView(R.layout.xxx);
}
而不是[HttpPost]
,当然您需要使用jQuery中使用$.post()的帖子,这是因为“POST”是实际将数据发布到服务器端的正确 - 但不是唯一 - HTTP动词。
其次,在将员工列表放入要发送的[HttpGet]
javascript对象之前,不应该对其进行字符串化。
所以, ,马上就去吧data
list = JSON.stringify(list);
您可能还需要使用上面链接中的var data = { 'id': 999, 'name': 'JAMES', 'employees': list };
检查文档提供dataType。
最后,在您的操作方法中删除$.post(url,data,onsucess,dataType)
并将其替换为具体的集合类型,如IEnumerable<T>
,因为JSON序列化程序需要知道在绑定时实例化哪种类型的集合。
答案 1 :(得分:0)
实际上,您可以通过使用$ .ajax()
将其更改为POST来实现它在操作方法
中使用字典对象而不是IEnumerablepublic ActionResult GetDetails(int id, string name, Dictionary<int,string> employees)
{
然后在剧本中
var list = [{ Id: 101, Gender: 'MALE' }, { Id: 102, Gender: 'FEMALE' }];
var data = { id: 999, name: 'JAMES', employees: list };
debugger;
$.ajax({
url: '/Home/GetDetails',
type: "GET",
data :data,
contentType: "application/json",
dataType: "json"
});
答案 2 :(得分:-1)
我正在回复你的评论,但我认为更容易证明我的观点是一个答案。
要回答你的问题,不,我不确定。但这就是为什么我要求你先尝试一下,这似乎是合乎逻辑的,因为你将list
而不是IEnumerable
传递给你的函数。
另外,根据您的Employee
课程的样子,您应该尝试这样做:(您的Employee课程中需要构造函数)
List<Employee> list = new List<Employee>();
list.Add(new Employee(101, 'MALE'));
list.Add(new Employee(102, 'FEMALE'));
var data = { 'id': 999, 'name': 'JAMES', 'employees': list };
...
<强>更新强>
我意识到为什么我错了,我一直在用C#术语思考。 Json.stringify()返回一个json样式的字符串(C#只是看作一个字符串),所以你的public Task GetDetails(int id, string name, IEnumerable employees)
应该是public Task GetDetails(int id, string name, string employees)
,然后在C#中,你需要解析JSON字符串。一个有用的链接:
How can I parse JSON with C#?