PDA

View Full Version : فرخوانی یک متد توسط ایجکس



sara_t
چهارشنبه 20 اردیبهشت 1396, 14:07 عصر
سلام دوستان

دوستان من یه متد در کنترلرادمین نوشتم که میخان در یک اکشن دیگه توسط 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>

}

alireza_s_84
چهارشنبه 20 اردیبهشت 1396, 14:43 عصر
url: "SelectStuff2"
احتمال خیلی زیاد آدرس دهی اشتباهه، مگر اینکه هنگام تعریف Route ها شما کنترلر پیش فرض رو کنترلی گذاشته باشین که این اکشن متد تو اون تعریف شده. آدرس رو اینجوری بنویسید:
@Url.Action("SelectStuff2", "نام کنترلر")

sara_t
چهارشنبه 20 اردیبهشت 1396, 17:10 عصر
ممنون.انجام دادم اما درست نشد

sara_t
چهارشنبه 20 اردیبهشت 1396, 17:45 عصر
من برنامه رو که تریس میکنم لیستم پر میشه.یعنی ajax راخوانی میشه.ظاهرا مشکل از تابع loadSutff هست که مقادیر رو نشون نمیده.

Moien Tajik
چهارشنبه 20 اردیبهشت 1396, 19:23 عصر
روی SelectStuff2 یک Breakpoint قرار بدید که مطمئن بشید وارد اکشن میشید ; اگر وارد اکشن نشدید ، url رو در ajax به این شکل تغییر بدید :

var url = "/Home/SelectStuff2";

sara_t
چهارشنبه 20 اردیبهشت 1396, 19:44 عصر
بله وارد متد selectstuff2 میشم و دیتاها وارد list میشن.اما چیزی در ویو نشون داده نمیشه.بنظر میاد تابع loadstuff کاری انجام نمیده

alireza_s_84
چهارشنبه 20 اردیبهشت 1396, 20:27 عصر
public IEnumerable<Stuff> SelectStuff2() {

var list = db.Stuffs.ToList();

return list;
نتیجه برگشتی از اکشن متد شما ممکنه قابل تبدیل به Json نباشه. در بدنه done کد console.log(resp) رو قرار بدین ببینید از سرور چی برگشت داده میشه.
همچنین به جای برگشت نوع IEnumerable بهتره نتیحه برگشتی ActionResult باشه و بصورت صریح مقدار json برگشت داده بشه.

sara_t
چهارشنبه 20 اردیبهشت 1396, 22:38 عصر
اگر alert رو قرار بدم resp رو یه مدل برمیگردونه

.done(function (resp) {
alert(resp);



System.Collections.Generic.List`1[Foods.Models.DomainModels.Stuff]
ولی تو توابع بعدی هیچ مقداری حتی یه پیغام هم نشون نمیده

sara_t
چهارشنبه 20 اردیبهشت 1396, 22:56 عصر
من کلا دارم از این اموزش استفاده میکنم.منتها این اموزش بصورت یه Api هست من تابعش کردم.یعنی جایی رو اشتباه کردم؟


http://www.dotnetcurry.com/aspnet-mvc/1039/drag-drop-html5-aspnet-mvc-jquery

alireza_s_84
پنج شنبه 21 اردیبهشت 1396, 13:00 عصر
اگر 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]

sara_t
پنج شنبه 21 اردیبهشت 1396, 13:28 عصر
بله تو قسمت alert اینو به من نشون میده.من از اموزش بالا استفاده کردم.منتها اون اموزش یک api ساخته.من اومدم ومتد اون api رو به کنترلر admin اوردم.

alireza_s_84
پنج شنبه 21 اردیبهشت 1396, 15:27 عصر
بله تو قسمت alert اینو به من نشون میده.من از اموزش بالا استفاده کردم.منتها اون اموزش یک api ساخته.من اومدم ومتد اون api رو به کنترلر admin اوردم.
public ActionResult SelectStuff2(){


var list = db.Stuffs.ToList();
return Json(list, JsonRequestBehavior.AllowGet);
}

نتیجه برگشتی متدهای API بطور خودکار بصورت Json برگشت داده میشه ولی در کنترلرهای معمولی شما باید صراحتا نوع بازگشتی رو مشخص کنید.