ورود

View Full Version : برگرداندن نتیجه ی عملیات یا پبغام از کنترلر به ajax



resident
دوشنبه 28 بهمن 1392, 16:39 عصر
سلام.
من با ajx ، اکشن زیر رو اجرا می کنم.
سوال اول: میخوام به ajax بگم نتیجه ی عملیات success بوده یا unsuccess یا اصلا پیغامی بفرستم برای نمایش به کاربر، چطور باید بگم؟ در مورد همین اکشن خودم چطور میشه ؟ datatype ام تو ajax، html تعیین شده.


[HttpPost]
publicstring Delete(int id)
{
try
{
var entity = RepositoryObject.SelectByID(id);
RepositoryObject.Delete(entity);
return"Success";
}
catch
{
return"UnSuccess";
}
}

Cybersilent
دوشنبه 28 بهمن 1392, 20:10 عصر
سمت کنترلر:
public ActionResult Delete(int id)
{
bool isSuccess=true;
try
{
var entity = RepositoryObject.SelectByID(id);
RepositoryObject.Delete(entity);
catch
{
isSuccess=false;
}
return Json(new { isSuccess = isSuccess }, JsonRequestBehavior.AllowGet);
}
و در سمت ویو :
jQuery.getJSON('@Url.Action("Delete", "Home")', { id: fId }, function (data) {
if (data.isSuccess) {
$("#box-success").css("display", "inherit");
} else {
$("#box-fail").css("display", "inherit");
}
});

resident
دوشنبه 28 بهمن 1392, 20:22 عصر
دوست عزیز ممنون از پاسختون...
حتما باید از json استفاده کنم؟
در حالتی که بخوام یه view برگردونم چطور باید بنویسم؟

resident
دوشنبه 28 بهمن 1392, 20:24 عصر
راستی این که برمی گرده به ajax، اونجا چی باید بنوسم؟

Cybersilent
چهارشنبه 30 بهمن 1392, 21:54 عصر
راستی این که برمی گرده به ajax، اونجا چی باید بنوسم؟
اگر درست متوجه شده باشم :
jQuery.getJSON('@Url.Action("Delete", "Home")', { id: fId }, function (data) {
if (data.isSuccess) {
$("#box-success").css("display", "inherit");
} else {
$("#box-fail").css("display", "inherit");
}
});


الان شی data در کدهای جاوا اسکریپت حاوی مقادیر انتصاب داده شده در سمت سرور می باشد، که در مثال ما isSuccess می باشد.
حالا اگر اونجا مقدار bool داده باشید اینجا هم به همون شکل داریدش. از اینجا به بعد دیگه میشه برنامه نویسی سمت کاربر و جاوااسکریپت.

shadbad
پنج شنبه 01 اسفند 1392, 09:17 صبح
درود
شما میتوانید view را به string تبدیل کنید و بعد در قالب یک پارامتر به کلاینت بفرستید. نمونه کدی که view را به رشته تبدیل میکنه:

private string RenderRazorViewToString(string viewName, object model = null)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerCont ext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);

viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContex t, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}


برگرفته از psi-co.net/blog/posts/render-view-to-string-and-mailing-it

resident
سه شنبه 27 اسفند 1392, 12:42 عصر
jQuery.getJSON('@Url.Action("Delete", @FormName)', { id: $('#SelectedIdInput').val() }, function (data) {
if (data.isSuccess) {
$.pnotify({
title: 'نتیجه عملیات',
text: 'عملیات حذف موفقیت انجام شد',
type: 'success'
});
refreshList();
} else {
$.pnotify({
title: 'نتیجه عملیات',
text: 'عملیات حذف با موفقیت انجام نشد',
type: 'error'
});
}
});


من این کدها رو نوشتم. کدهای داخل کنترلر اجرا میشن اما وقتی بر می گرده ، خط if (data.isSuccess رو اجرا نمی کنه، میره بیرون...

Dr.Bronx
چهارشنبه 28 اسفند 1392, 01:28 صبح
مثلا این میشه کنترلر


[HttpPost, ActionName("Delete"), Authorize]
public ActionResult DeleteConfirmed(int id)
{
Division division = _db.Divisions.Single(x => x.DivisionId == id);


string errorMessage;
if (DbRelationEnforcer.CanDelete(_db, division, out errorMessage))
{
division.SetDeleted(User.Identity.Name);
_db.SaveChanges();
return Json(new JsonResponseCreatePartial { Success = true }, JsonRequestBehavior.AllowGet);
}


return Json(new JsonResponseCreatePartial { Success = false, Message = errorMessage }, JsonRequestBehavior.AllowGet);
}


View اینجوری میشه :



@using (Html.BeginForm("Edit", "SasProgram", FormMethod.Post))
{
<label for="Name">Name</label>
@Html.TextBoxFor(model => model.Name)


<input id='delete-btn' type="button" class="button" value="Delete" />
<input type="submit" class="button" value="Save Changes" />
}


و کد js


<script type='text/javascript'>
$(function() {
$("input#delete-btn").click(function(){
$.post('@Url.Action("Delete")', '@Model.Id', function(data) {
if(data.Success) {
alert("done")
} else {
alert("error")
}
});
});
});
</script>


موفق باشید ./

resident
چهارشنبه 28 اسفند 1392, 07:55 صبح
Dr.Bronx (http://barnamenevis.org/member.php?48204-Dr-Bronx) عزیز ممنون از اینکه وقت گذاشتی

در اکشن از JsonResponseCreatePartial استفاده کردین اما نمی شناسه. در چه namespace ای قرار داره؟

Dr.Bronx
چهارشنبه 28 اسفند 1392, 12:51 عصر
سلام .
شما اینجوری بنویسید .

return Json(new { Success = false, Message = "Error" }, JsonRequestBehavior.AllowGet);


این هم یک روش دیگه :


[HttpPost]
public JsonResult CheckDuplicate(string Name, string InitialField)
{

var Result = db.ArticleCategories.Where(a => a.Name == Name && a.Name != InitialField);

return Json(Result.Count() > 0 ? true : false, JsonRequestBehavior.AllowGet);


}


حتی از این تمیز تر هم میشه :دی


[HttpPost]
public JsonResult CheckDuplicate(string Name, string InitialField)
{

var Result = db.ArticleCategories.Where(a => a.Name == Name && a.Name != InitialField).Count();

return Json(Result, JsonRequestBehavior.AllowGet);


}


موفق باشید ./