每当select
字段更改时,我都会尝试从数据库中的表中获取一些信息。
我能够做出响应并且Ajax jQuery函数返回成功(函数)
问题是我不知道如何使用ASP.net MVC从我的数据库返回数据
我在成功的Ajax调用中获得的响应是以下文本:
ProduktWebKort.Models.WarehouseCustomer[]
这是我的控制器的一部分,其功能是通过Ajax调用
[HttpPost]
public string OnChange(int id)
{
return db.Customers.Where(C => C.CustomerID == id).ToString();
}
我的Ajax调用如下所示:
<script type="text/javascript">
$(function () {
// Document.ready -> link up remove event handler
$("#CustomerID").change(function () {
alert("Hej");
var option = $('option:selected', this).val();
$.ajax({
type: "POST",
url: '@Url.Action("Index/1", "Session")',
contentType: "application/json; charset=utf-8",
data: { id: 1 },
dataType: "html",
success: function (success) {
alert('Success');
console.log(success);
for (var i = 0; i < success.length; i++) {
$(".form-horizontal").append("<li>" + success[i] + " </li>");
console.log(success);
}
},
error: function (e, text, string) {
alert(e.message + text + string);
console.log(e);
}
});
});
});
</script>
我想从WarehouseCustomer
返回我的选择字段中CustomerID
个{{1}}的每个条目。
答案 0 :(得分:1)
.NET中.ToString()
方法的默认实现是返回对象的类型。因此,您得到的文本正是您正在处理的内容:WarehouseCustomer
对象的数组:
ToString方法的默认实现返回Object类型的完全限定名称,如以下示例所示。
要从服务器获取数据,您应该以XML或JSON格式(首选变体)序列化数据对象,以便在客户端解析它们。
你可以做的很多,所以你应该选择你喜欢的方式。我建议你看看@ mason的回答,因为它看起来是解决问题的最好方法。
答案 1 :(得分:1)
在MVC 5项目中,您使用Web API来响应AJAX请求。 Web API检查请求内容的请求以及客户端支持的格式。然后它适当地序列化为JSON或XML或其他格式。它也紧跟MVC架构,并且在即将到来的MVC 6中已合并到MVC框架中。
通过NuGet在项目中安装Web API。启用attribute routing。
[RoutePrefix("api/customers")]
public class CustomerController : ApiController
{
[Route("byid/{id}")]
public List<Customer> GetCustomers(int id)
{
return db.Customers.Where(C=>C.CustomerID==id).ToList();
}
}
应返回客户端请求的数据格式的客户对象列表(默认为JSON)。
您请求的网址应该是对~/api/customers/byid/{id}
的HTTP GET请求,例如:~/api/customers/byid/5
。我经常使用MVC Helper @Url.Content()
在客户端映射到Web API。
您的成功处理程序应该是这样的:
success: function (customers) {
alert('Success');
console.log(customers);
for (var i = 0; i < customers.length; i++) {
$(".form-horizontal").append("<li>" + customers[i].Name + "</li>");
console.log(success);
}
},
答案 2 :(得分:0)
您在服务器端和客户端的问题。
如果您想在服务器端获得List
客户,您应该像这样写Controller
:
[HttpPost]
public JsonResult OnChange(int id)
{
return Json(db.Customers.Where(C => C.CustomerID == id).ToList());
}
在客户端,如果您想使用IEnumerable
结果,则应更改这样的ajax代码:
$.ajax({
type: "POST",
url: '@Url.Action("OnChange", "Session")',
data: { id: 1 },
dataType: "json",
success: function (success) {
alert('Success');
console.log(success);
$.each(success, function (i, item) {
$(".form-horizontal").append("<li>" + item.CustomerID + "</li>");
});
},
error: function (e, text, string) {
alert(e.message + text + string);
console.log(e);
}
});
我希望您的OnChange
方法位于Session
Controller
。您可以按照您的理解访问列表元素的其他属性(item.CustomerID
)。