ورود

View Full Version : رهگیری کد بعد از submit



R_Rajaee_Rad
یک شنبه 26 آبان 1392, 20:13 عصر
سلام
چه طوری میتونم بفهمم که بعد از عمل submit توسط دکمه submit کد دقیقا کجا میره؟

چون الان بعد از انجام این عمل کلا کد وارد یه کنترلرغیر مربوطه(ورود کاربران!!) میشه!!

alireza.tabesh
یک شنبه 26 آبان 1392, 21:08 عصر
یکم سوال نامفهومه . شما خودتون مشخص می کنید که بعد از submit به کجا منتقل بشه . شما یک ActionResult دارید که به شما یک Viwe(model) برمی گردونه و بعد از submit از ActionResult هم نام خودش استفاده می کنه که توجه کنید بالاش نوشته [HttpPost] که مدل خودتونو به اون پاس میدید. اگر برای ActionResult دوم که مطرح کردم نوشته جایی که httpPost رو نوشتی ، [Authorize] رو نوشتی قطعاً به بخش ورود کاربران میره .

R_Rajaee_Rad
دوشنبه 27 آبان 1392, 05:53 صبح
یکم سوال نامفهومه . شما خودتون مشخص می کنید که بعد از submit به کجا منتقل بشه . شما یک ActionResult دارید که به شما یک Viwe(model) برمی گردونه و بعد از submit از ActionResult هم نام خودش استفاده می کنه که توجه کنید بالاش نوشته [HttpPost] که مدل خودتونو به اون پاس میدید. اگر برای ActionResult دوم که مطرح کردم نوشته جایی که httpPost رو نوشتی ، [Authorize] رو نوشتی قطعاً به بخش ورود کاربران میره .
این ویو تا زمانی که به صورت مستقل هست درست کار میکنه اما وقتی به عنوان partial view ازش استفاده میکنم این مشکل پیش میاد(میره صفحه لاگین)
از [authorize] هم استفاده نکردم

R_Rajaee_Rad
دوشنبه 27 آبان 1392, 16:28 عصر
کسی نظری نداره؟

hakim22
دوشنبه 27 آبان 1392, 16:51 عصر
با استفاده از قسمت Network در Chrome و یا ابزار Fiddler میتوانید مسیری که بعد از Submit طی میشود را مشاهده کنید.

شما وقتی از PartialView استفاده می کنید که یا محتوای صفحه قرار است با استفاده از Html.Action فراخوانی شود یا از Ajax استفاده کرده اید.

همانطور که دوست عزیزمون گفتن بیشترین احتمال این هست که شما از Authorize استفاده کرده اید. یا در یکی از Action ها یا در کنترلر مربوطه وگرنه هیچ دلیلی وجود ندارد که موتور MVC بعد از عمل Submit به Login برود.

در غیر این صورت لازم است اطلاعات بیشتری قرار بدید و بخصوص خروجی قسمت Network رو بررسی کنید.

R_Rajaee_Rad
سه شنبه 28 آبان 1392, 07:47 صبح
با استفاده از قسمت Network در Chrome و یا ابزار Fiddler میتوانید مسیری که بعد از Submit طی میشود را مشاهده کنید.

شما وقتی از PartialView استفاده می کنید که یا محتوای صفحه قرار است با استفاده از Html.Action فراخوانی شود یا از Ajax استفاده کرده اید.

همانطور که دوست عزیزمون گفتن بیشترین احتمال این هست که شما از Authorize استفاده کرده اید. یا در یکی از Action ها یا در کنترلر مربوطه وگرنه هیچ دلیلی وجود ندارد که موتور MVC بعد از عمل Submit به Login برود.

در غیر این صورت لازم است اطلاعات بیشتری قرار بدید و بخصوص خروجی قسمت Network رو بررسی کنید.

از حالت پارشیال ویو هم خارج کردم...یعنی یک راست کدها رو در پایین خبر نوشتم.اما بازم میره صفحه لاگین..از authorize هم استفاده نکردم...رهگیری با fiddler هم نتیجه ای نداشت.فقط میگه میره کنترلر account...ابزار newtwork هم پیداش نکردم

این قسمت ازویوی جزئیات خبر که شامل فرم ارسال نظر هست:

.
.
.
@using (Html.BeginForm("Create", "Comment"))
{

<fieldset>

<div class="container">
<div class="row-fluid">
<div class="span8">
@if (WebSecurity.IsAuthenticated)
{
<div class="iran text-success">
<i class="icon-user"></i>
نام کاربری:
<span>
@WebSecurity.CurrentUserName
</span>
</div>


<div class="">
<input type="hidden" name="ArticleId" />
</div>
<div class="controls">

@Html.TextArea("Description", new { @Class = "span6", @Rows = 4 })

</div>

<div class="controls">
<span class="span4">

<p>
<input type="submit" class="btn btn-primary" value="ثبت دیدگاه" />
</p>

</span>
</div>
}
else
{
<div class="iran">
@Html.ActionLink("برای ثبت نظر وارد شوید", "LoginUser", "Account")

</div>
}
.
.
.




اینم از کنترلر که اصلا واردش هم نمیشه


[HttpPost]
public ActionResult Create(FormCollection form)
{
try
{
// TODO: Add insert logic here
//if (ModelState.IsValid)


var ins = new Comment();
ins.Description = form["Description"];
ins.ArticleId = Convert.ToInt16(form["ArticleId"]);
ins.DateSend = Shamsi();
ins.TimeSend = DateTime.Now.ToString("HH:mm:ss");
ins.UserId = WebSecurity.CurrentUserId;
bank.Comments.InsertOnSubmit(ins);
bank.SubmitChanges();


return RedirectToAction("Index","Home");
}
catch
{
return null;
}
}

hakim22
سه شنبه 28 آبان 1392, 08:49 صبح
اول اینکه شما هیچ نیازی به FormCollection در ASP.MVC ندارید و به کد زیر تغییر بدید.


public ActionResult Create(Comment comment)


دوم اینکه شما از WebSecurity چند جا استفاده کرده اید که فرقی با اتریبیوت Authorizr در کنترلر نداره

سوم اینکه در کد آخری که قرار دادید صفحه ی Login بعد از Submit میاد یا قبل از آن و اصلا صفحه ی فرم ظاهر نمیشود!؟

کد WebSecurity.IsAuthenticated بررسی می کند که آیا کاربر Login کرده است یا نه و در صورت False بودن صفحه ی Login را باز می کند. مطمئن بشوید که AuthCookie رو ذخیره می کنید.


FormsAuthentication.SetAuthCookie(userName, true);

R_Rajaee_Rad
سه شنبه 28 آبان 1392, 09:40 صبح
اول اینکه شما هیچ نیازی به FormCollection در ASP.MVC ندارید و به کد زیر تغییر بدید.تغییر دادم..


سوم اینکه در کد آخری که قرار دادید صفحه ی Login بعد از Submit میاد یا قبل از آن و اصلا صفحه ی فرم ظاهر نمیشود!؟
بله... صفحه لاگین بعد از submit میاد


کد WebSecurity.IsAuthenticated بررسی می کند که آیا کاربر Login کرده است یا نه و در صورت False بودن صفحه ی Login را باز می کند. مطمئن بشوید که AuthCookie رو ذخیره می کنید.اضافه کردم...عملیاتش هم درست انجام میشه ..اما بازم بعد از submit کامنت میره لاگین

R_Rajaee_Rad
چهارشنبه 29 آبان 1392, 06:56 صبح
مشکل حل شد...
از هدر سایت بود که اونجا برنامه رو سمت صفحه لاگین هدایت میکرد
================================================== ===
آقای حکیم شما توی برنامه ثبت کامنت تون گفتید که در آخر
partial view(submitcomment) رو فراخونی کنید
اما صفحه من که توش ارسال نظرات هست اینجوریه(/Article/Details/articleid (http://localhost:58001/Article/Details/articleid))
برای انتهای کار بعد از ذخیره سازی توی بانک من اینو نوشتم

return RedirectToAction("Details", "Article",new{id= articleid});
البته درسته اما فقط یکبار صفحه رو رفرش میکنه...اون حالت اجاکسی رو نداره

hakim22
چهارشنبه 29 آبان 1392, 07:34 صبح
چیزی که شما در پروژه ی خود دارید هیچ ربطی به ajax ندارد. هدف از استفاده از Ajax جلوگیری از همان یکبار Refresh شدن صفحه است و این مسئله دیگر یک استاندارد است و سایت با صفحاتی که به طور کامل Refresh میشوند مطلوب هیچکس نیست. حتی اگر برای یکبار این عمل روی دهد.

R_Rajaee_Rad
چهارشنبه 29 آبان 1392, 09:33 صبح
چیزی که شما در پروژه ی خود دارید هیچ ربطی به ajax ندارد. هدف از استفاده از Ajax جلوگیری از همان یکبار Refresh شدن صفحه است و این مسئله دیگر یک استاندارد است و سایت با صفحاتی که به طور کامل Refresh میشوند مطلوب هیچکس نیست. حتی اگر برای یکبار این عمل روی دهد.
میدونم (فقط آخر کار بعد از ثبت کامنت در بانک ) چطوری صفحه رو دوباره فراخوانی کنم که اینجوری رفرش نشه؟