2011-09-04 124 views
1

在EditPhoto.cshtml:MVC 3剃须刀AJAX不起作用

@model vg_music.Models.images 
@{ 
    ViewBag.Title = "EditPhoto"; 
} 
<h2> 
    EditPhoto2</h2> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
@using (Ajax.BeginForm(new AjaxOptions{UpdateTargetId = "AjaxDiv"})) { 
    @Html.ValidationSummary(true) 
    <div id="AjaxDiv"> 
     @Html.Partial("EditPhotoForm") 
    </div> 
} 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

EditPhotoForm.cshtml:

@model vg_music.Models.images 
<fieldset> 
      <legend>images</legend> 
      @Html.HiddenFor(model => model.id) 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.title) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.title) 
       @Html.ValidationMessageFor(model => model.title) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.comment) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.comment) 
       @Html.ValidationMessageFor(model => model.comment) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.filename) 
      </div> 
      <div class="editor-field"> 
      <img src="@Url.Content("~/uploads/images/little/"+Model.filename)" alt="@Model.title"/><br />     
      </div> 
      <p> 
       <input type="submit" value="Сохранить" /> 
      </p> 
     </fieldset> 

PhotosController.cs: ....

[HttpPost] 
    public ActionResult EditPhoto(images obj) 
    { 
     if (ModelState.IsValid) 
     { 
      var db = new EditImagesModel(); 
      db.SaveImage(obj); 
      if (Request.IsAjaxRequest()) //This does not work. 
      { 
       return PartialView("EditPhotoForm"); 
      } 
      return RedirectToAction("EditPhotos"); 

     } 
     return View(); 
    } 

...

为什么不满意田间:

if (Request.IsAjaxRequest()) 
{ 
    return PartialView("EditPhotoForm"); 
} 

回答

2

为什么不满意:

因为你忘了,包括:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

EditPhoto.cshtml页。因此,Ajax.BeginForm帮手不会执行任何AJAX请求,而只是一个简单的POST表单。

相反ASP.NET MVC 1.0和2.0,其中Ajax.*助手如Ajax.ActionLinkAjax.BeginForm用的javascript冒失污染您的标记,在ASP.NET MVC 3他们简单地生成HTML5上相应的DOM元素data-*属性。这种方式标记和JavaScript保持分开。你需要JavaScript来解释这些属性。该JavaScript位于需要包含的jquery.unobtrusive-ajax.js脚本中。

+0

谢谢。 )))) 有用。 ) – SirRoland

+0

@ user925762,太好了,我很高兴你解决了这个问题。 –