ورود

View Full Version : برداشتن post back از Action Link



نیکناز
جمعه 29 شهریور 1392, 00:40 صبح
سلام
من می خوام postback رو از action link بردارم .
می خوام یه همچین چیزی درست کنم :
( << 1 2 3 4 >> )
با ajax امتحان کردم ارور زیر رو تو فایر باگ می گیرم .


" NetworkError: 500 Internal Server Error - http://localhost/myAction/search? pagenumber=2"

یا


" NetworkError: 500 Internal Server Error - http://localhost/myAction/search? pagenumber=1"

با متد GET هم امتحان کردم . ولی بی نتیجه .


@using (Ajax.BeginForm( "search ","MyAction",new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = ""
}))
{
int page = (int)ViewBag.page;
int pages = (int)ViewBag.pages;

<div class="pagination pagination-left">
<ul>
<li>@Ajax.ActionLink("«", "search ","MyAction", new { numberpage = pages })</li>
@{for (int i = pages; i >= 1; i--)
{
if (i == page)
{
<li class="active">@HtmlAjax.ActionLink(i.ToString(), "search "," MyAction ", new { numberpage = i })</li>
}
else
{
<li>@Ajax.ActionLink(i.ToString(),"search ", " MyAction ", new { numberpage = i })</li>
}
}
}
<li>@Ajax.ActionLink("»","search ", " MyAction ", new { numberpage = 1 })</li>

</ul>


</div>


کنترلر :



[HttpPOST]
public ActionResult search(int? numberpage)
{
int skip = 0;
ViewBag.page ;
Temp= myobjectclass.GetAll().tolist();
ViewBag.pages = (Temp.Count() / 5) + 1;

var db = new ProjectContext();

var obj = new projectClass.myobjectclass();
if (numberpage!= null)
{
skip = 5 * (numberpage.Value - 1);
ViewBag.page = numberpage.Value;

}
obj.StudentRequierments = Temp.Skip(skip).Take(5).ToList();
ViewBag.pages = (Temp.Count() / 5) + 1;

return View(obj);
}

نیکناز
شنبه 30 شهریور 1392, 18:37 عصر
ای کاش یه نفر یه
پیشنهادی ، یه نظری ... بده

hakim22
شنبه 30 شهریور 1392, 21:58 عصر
ارور 500 مروبط میشه به اینکه یا آدرس در سرور پیدا نشده یا اینکه موقع اجرا کد در سمت سرور خطایی پیش اومده.

اصولا شما دارید با Query string شماره صفحه ها رو به سرور میفرستید روش بهتر استفاده از route value است

اسم کنترلر معلوم نیست MyAction هست یا Search !؟ چون کد زیر به دنبال myAction میگرده ولی شما متد search رو در سرور تعریف کرده اید

<li>@Ajax.ActionLink("»", " MyAction ", new { numberpage = 1 })</li>


در نهایت شما نیازی به استفاده از ajax.actionlink ندارید. یک دکمه یا لینک که رویداد submit فرم رو بهش بفرستید کافیه.

نیکناز
شنبه 30 شهریور 1392, 22:16 عصر
مرسی . نه من اینج اشتباه نوشتم و گرنه تو کد خودم درست نوشتم .search رو نوشتم . پستو تصحیح کردم.
اگه از ajax استفاده نکنم post back دارم ندارم؟ من بدون ajax انجام دادم قبلا و کدم اجرا میشد ولی با post back . واسه همین ajax استفاده کردم .
مزیت rout value چیه؟

hakim22
شنبه 30 شهریور 1392, 23:15 عصر
آدرسی که باید به سرور ارسال بشه چیزی شبیه اینه


http://localhost/myAction/search/1


این چیزی هست که کد سمت سرور شما بهش واکنش خواهد داد. همه ی کدهای شما قبلا درون یک ajax.beginform قرار گرفته و دیگه نیازی نیست از ajax.actionlink استفاده کنید.
شما می خواهید اطلاعات به صورت صفحه به صفحه نمایش داده بشه مثلا کاربر یک دکمه ی بعدی ببینه و وقتی روش کلیک میکنه صفحه ی بعدی رکوردها ظاهر بشه. یک دکمه submit بسازید درون فرم و همه ی ajax.actionlink هارو حذف کنید. کار خواهد کرد. اما قبلش باید UpdateTargetId رو روی id یک div که درون فرم قرار داره و جدول داده ها درونش قرار دارند تنظیم کنید. هر چیزی درون این div باشه replace میشه.

حالا اگر میخواهید بیش از یک submit داشته باشید یعنی دکمه ی بعدی ، قبلی ، آخر ، اول و شما ره س صفحات هم داشته باشید باید همه رو به صورت تگ a بسازید و با کمک jquery هر کدوم رو به جای submit فرم اجرا کنید.( رویداد on click)

اصولا وقتی کار شما با ajax زیاده بهتره از دستور ajax.beginform استفاده نکنید و بجاش در jquery مستقیما دستورات ajax رو اجرا کنید. اینجوری کنترل بیشتری روی نتیجه ی کار دارید. کلا ajax.beginform محدود عمل میکنه و خیلی وقتها نتیجه ی دلخواه رو نمیده.

در نهایت پیشنهاد میکنم سری به این مقاله بزنید .
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

در این مقاله از mvcPager استفاده شده که یک ابزار آماده برای طراحی paging است.

younesdoost
شنبه 30 شهریور 1392, 23:18 عصر
گویا قصد پیاده سازی صفحه یندی رو دارید.چرا به PagedList که یک nuget package هستش نمی سپریدش تا هم به صورت آژاکس امکان صفحه یندی رو بهتون بده هم غیر آژاکس.البته خیلی آپشن های دیگه هم داره.

نیکناز
یک شنبه 31 شهریور 1392, 16:06 عصر
خوب من قبلا یه چنین چیزی داشتم :
MyClass :


public class Feachers
{
public List<Project.Models.view_Student> Players { get; set; }
public string name { get; set; }
public int day { get; set; }
public int month { get; set; }
public int year { get; set; }
}


}

view :

مدل زیر و به ویو ارسال می کردم و توسط یه سری کمبو و تکست باکس پر می کردم مدل رو.



@model Project.Models.AllClasses.MyClass.Feachers


اما حالا واسه اینکه یه چنین چیزی @model PagedList.IPagedList به ویو ارسال کنم باید چه تغییراتی رو کلاس و ویو بدم ؟

نیکناز
یک شنبه 31 شهریور 1392, 19:30 عصر
من این مدل زیر و پاس دادم به ویو :


@model PagedList.IPagedList< Project.Models.AllClasses.MyClass.Feachers>


ولی تمام پراپرتی ها رو از دست دادم .(name,day , month,..)
الان فقط PageSize,PageNumber ,TotalItemCount,... رو دارم

نیکناز
یک شنبه 31 شهریور 1392, 21:40 عصر
دوستان عزیز هیچ نظری؟