فرخوانی یک متد توسط ایجکس
سلام دوستان
دوستان من یه متد در کنترلرادمین نوشتم که میخان در یک اکشن دیگه توسط ajax اون رو فرخوانی کنم.اما اصلن وارد متدم نمیشه ممنون میشم راهنمایی کنید؟
این متد من:
public IEnumerable<Stuff> SelectStuff2()
{
var list = db.Stuffs.ToList();
return list;
اینم از اکشن selectstuff:
public ActionResult SelectStuff()
{
return View();
}
اینم از ویوی selectstuff:
<table>
<tr>
<td> <h1> Suff List</h1>
</td> <td> <h1> Selected Stuffs</h1> </td> </tr>
<tr> <td> <div id="dvleft">
<ul id="lststuffs">
</ul> </div> </td> <td> <div id="dvright">
<ul id="lstselectedstuffs">
</ul> </div> </td> </tr> </table>
@section scripts{
<script type="text/javascript">
$(document).ready(function () {
loadStuffs();
function loadStuffs() {
var items="";
$.ajax({
url: "SelectStuff2",
type: "GET"
}).done(function (resp) {
$.each(resp, function (idx, val) {
items += "<li draggable='true'>" + val.Name + "</li>";
});
$("#lststuffs").html(items);
setEvents();
}).error(function (err) {
alert("Error! " + err.status);
});
}
});
</script>
}
نقل قول: فرخوانی یک متد توسط ایجکس
نقل قول:
url: "SelectStuff2"
احتمال خیلی زیاد آدرس دهی اشتباهه، مگر اینکه هنگام تعریف Route ها شما کنترلر پیش فرض رو کنترلی گذاشته باشین که این اکشن متد تو اون تعریف شده. آدرس رو اینجوری بنویسید:
@Url.Action("SelectStuff2", "نام کنترلر")
نقل قول: فرخوانی یک متد توسط ایجکس
ممنون.انجام دادم اما درست نشد
نقل قول: فرخوانی یک متد توسط ایجکس
من برنامه رو که تریس میکنم لیستم پر میشه.یعنی ajax راخوانی میشه.ظاهرا مشکل از تابع loadSutff هست که مقادیر رو نشون نمیده.
نقل قول: فرخوانی یک متد توسط ایجکس
روی SelectStuff2 یک Breakpoint قرار بدید که مطمئن بشید وارد اکشن میشید ; اگر وارد اکشن نشدید ، url رو در ajax به این شکل تغییر بدید :
var url = "/Home/SelectStuff2";
نقل قول: فرخوانی یک متد توسط ایجکس
بله وارد متد selectstuff2 میشم و دیتاها وارد list میشن.اما چیزی در ویو نشون داده نمیشه.بنظر میاد تابع loadstuff کاری انجام نمیده
نقل قول: فرخوانی یک متد توسط ایجکس
نقل قول:
public IEnumerable<Stuff> SelectStuff2() {
var list = db.Stuffs.ToList();
return list;
نتیجه برگشتی از اکشن متد شما ممکنه قابل تبدیل به Json نباشه. در بدنه done کد console.log(resp) رو قرار بدین ببینید از سرور چی برگشت داده میشه.
همچنین به جای برگشت نوع IEnumerable بهتره نتیحه برگشتی ActionResult باشه و بصورت صریح مقدار json برگشت داده بشه.
نقل قول: فرخوانی یک متد توسط ایجکس
اگر alert رو قرار بدم resp رو یه مدل برمیگردونه
.done(function (resp) {
alert(resp);
System.Collections.Generic.List`1[Foods.Models.DomainModels.Stuff]
ولی تو توابع بعدی هیچ مقداری حتی یه پیغام هم نشون نمیده
نقل قول: فرخوانی یک متد توسط ایجکس
من کلا دارم از این اموزش استفاده میکنم.منتها این اموزش بصورت یه Api هست من تابعش کردم.یعنی جایی رو اشتباه کردم؟
کد HTML:
http://www.dotnetcurry.com/aspnet-mvc/1039/drag-drop-html5-aspnet-mvc-jquery
نقل قول: فرخوانی یک متد توسط ایجکس
نقل قول:
نوشته شده توسط
sara_t
اگر alert رو قرار بدم resp رو یه مدل برمیگردونه
.done(function (resp) {
alert(resp);
System.Collections.Generic.List`1[Foods.Models.DomainModels.Stuff]
ولی تو توابع بعدی هیچ مقداری حتی یه پیغام هم نشون نمیده
نتیجه برگشتی شما اینه؟؟؟
نقل قول:
System.Collections.Generic.List`1[Foods.Models.DomainModels.Stuff]
نقل قول: فرخوانی یک متد توسط ایجکس
بله تو قسمت alert اینو به من نشون میده.من از اموزش بالا استفاده کردم.منتها اون اموزش یک api ساخته.من اومدم ومتد اون api رو به کنترلر admin اوردم.
نقل قول: فرخوانی یک متد توسط ایجکس
نقل قول:
نوشته شده توسط
sara_t
بله تو قسمت alert اینو به من نشون میده.من از اموزش بالا استفاده کردم.منتها اون اموزش یک api ساخته.من اومدم ومتد اون api رو به کنترلر admin اوردم.
public ActionResult SelectStuff2(){
var list = db.Stuffs.ToList();
return Json(list, JsonRequestBehavior.AllowGet);
}
نتیجه برگشتی متدهای API بطور خودکار بصورت Json برگشت داده میشه ولی در کنترلرهای معمولی شما باید صراحتا نوع بازگشتی رو مشخص کنید.