2011-09-04 123 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,太好了,我很高興你解決了這個問題。 –