2013-08-05 2 views
0

Что я хочу сделать, так это вызвать диалоговое окно с предупреждением из контроллера. Причина в том, что контроллер вызывается видом через вызов ajax и не перезагружает страницу, поэтому не сможет сравнивать любые новые данные в tempdata или иначе.Вызов окна предупреждения с контроллера

Целью этого действия является проверка того, должен ли быть установлен ученик в классе или нет. Если класс не находится в своем расписании, тогда bool полномочий остается ложным, и появляется предупреждение о том, что ученик не находится в классе.

public ActionResult Action(string ccod, int sid) 
    { 
     IEnumerable<MvcStudentTracker.Databases.Course> result = from course in db.Courses 
        join sched in db.Schedules on course.CourseCode equals sched.ClassCode 
        where sched.StuID == sid 
        select course; 
     bool permission = false; 
     foreach (var item in result) 
     { 
      if (item.CourseCode == ccod) 
       permission = true; 
     } 

     if (permission == false) 
     { 
      //call alert dialog box "This student is not signed up for this class" 
     } 
     return null; 

    } 
+3

Почему не возвращают 'JsonResult' с' permission' состояния, а затем в успехе вашего вызова Ajax использовать это значение для отображения предупреждения? –

+0

Или, если вы действительно этого хотели, просто установите переменную ViewBag и используйте ее при объявлении функции JS для отображения диалогового окна. – user1477388

+0

Потому что я новичок в mvc и не знал, что это вариант. Я попробую. Благодарю. – RSpraker

ответ

2

Давайте изменим ваше действие, чтобы оно вернуло объект JsonResult. Таким образом, мы можем легко манипулировать его результатами на стороне клиента. Поскольку вы уже вызываете его с помощью javascript, это лучшее решение.

Итак, ваше действие:

public JsonResult Action(string ccod, int sid) 
{ 
    IEnumerable<MvcStudentTracker.Databases.Course> result = from course in db.Courses 
       join sched in db.Schedules on course.CourseCode equals sched.ClassCode 
       where sched.StuID == sid 
       select course; 

    return Json(result.Any(x => x.CourseCode == ccod), JsonRequestBehavior.AllowGet); 
} 

И ваш вид:

$.ajax({ 
    url: 'root/Action', 
    cache: false, 
    type: 'GET', 
    data: { 
     ccod: $('...').val() 
     , sid: $('...').val() 
    }, 
    dataType: 'json' 
}).done(function (data) { 
    if (data) { 
     //ok! 
    } 
    else { 
     //permission denied 
    } 
}); 

Обратите внимание, что я изменил свой код действия. Вы можете просмотреть его и изменить его еще немного.

0

добавить это в ваш код:

Page.ClientScript.RegisterStartupScript(Page.GetType(), "alrt", "alert('Anything');", true); 

как htis

public ActionResult Action(string ccod, int sid) 
     { 
      IEnumerable<MvcStudentTracker.Databases.Course> result = from course in db.Courses 
         join sched in db.Schedules on course.CourseCode equals sched.ClassCode 
         where sched.StuID == sid 
         select course; 
      bool permission = false; 
      foreach (var item in result) 
      { 
       if (item.CourseCode == ccod) 
        permission = true; 
      } 

      if (permission == false) 
      { 
       //call alert dialog box "This student is not signed up for this class" 
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "alrt", "alert('This student is not signed up for this class');", true); 
      } 
      return null; 

     } 
Смежные вопросы