Представление ajax в mvc3 на стороне контроллера. Как? - PullRequest
0 голосов
/ 09 декабря 2010

Я не понимаю, один раз нажал кнопку

Как обрабатывать ajax-вызов на стороне сервера, чтобы моя DataAnnotation работала и я получаю сообщение об ошибке или об ошибке.

<script src="../../../../Content/Scripts/jquery-1.4.4-vsdoc.js" type="text/javascript"></script
 <script type="text/javascript">

     $(function () 
     {
         $("#createButton").click(function () 
         {
             var profile = {
                 FirstName: $("#FirstName").val(),
                 LastName: $("#LastName").val(),
                 Email: $("#Email").val()
             };

                 $.ajax({
                     url: "/Profile/Create",
                     type: "Post",
                     data: JSON.stringyfy(profile),
                     dataType: "json",
                     contentType: "Application/json; charset=utf-8",
                     success: function () {
                         $("#message").html("Profile Saved.");
                     },
                     error: function () {
                         $("#message").html("Error occured");
                     }
                 });

            return false;
        });
     });

</script>

//Server side
public ActionResult Create(string confirmButton, CreateViewModel userVm)
{
    if (confirmButton != "Create Profile") return RedirectToAction("Index");

    if (!ModelState.IsValid)
        return View("Create", userVm);

    User user = new User();
    Mapper.Map(userVm, user);

    _repository.Create(user);

    return RedirectToAction("Details", new { id = user.UserId });
}

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

Попробуйте вернуть JsorResult вместо перенаправления в представление, затем на клиентскую сторону, проанализировать JsonResult и действовать соответственно.

[HttpPost]
public JsonResult DeleteDoc(int Id, int DocCode, SomeObject Model) 
{    
try
{
    // Check annotations stuffs
    if (!Model.IsValid) {
    var jsonDataM = new { ExitCode= -100, message = "Invalid Model" };
    return Json(jsonDataM, JsonRequestBehavior.DenyGet);
    }
    // My logic in here
    var jsonData = new { ExitCode= 0, message = "Everything's ok" };
    return Json(jsonData, JsonRequestBehavior.DenyGet);
}
catch (Exception e)
{
    var jsonData2 = new { ExitCode= -1, message = "Everything's Ko" + e.Message };
    return Json(jsonDat2a, JsonRequestBehavior.DenyGet);
} 
}

в обратном вызове OnSuccess вы можете сослаться на это с помощью:

<script type="text/javascript">
function MyAjaxCallBack(context) {
  var code = context.ExitCode;
  if (code != 0) {
    alert (context.message);
  }
}
</script>

Обратите внимание, что этот код упрощен. При управлении IsValid в Model я обычно выполняю del ModelState для создания сообщения.

0 голосов
/ 09 декабря 2010

Если я правильно помню (прошло много времени с тех пор, как я играл с jquery), успех и ошибка указывают на возвращаемое значение самого фактического HTTP-запроса. Например, если вы нажмете 404, вы получите сообщение об ошибке.

Независимо от того, был ли профиль успешно создан с помощью логики вашей страницы, если сам запрос был обработан, сообщение об успехе будет обработано - вам нужно интерпретировать возвращаемое значение самостоятельно в этот момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...