2013-11-27 6 views
1

У меня есть следующий код внутри Ут ASP.NET MVC зрения бритвы: _Ajax.BeginForm не вызова метода действия

@using (Ajax.BeginForm("ManageCustomAsset", "Customer", new AjaxOptions 

    { 
     InsertionMode = InsertionMode.InsertBefore, 
     UpdateTargetId = "customassettableBody", 
     LoadingElementId = "progress", 
     HttpMethod= "POST", 
     OnSuccess="submitform" 
    })) 
    { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 
     <div> 
    <span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.CustomerName) </span>  
    @Html.TextBoxFor(model => model.CustomAsset.CustomerName, new { disabled = "disabled" }) 
    @Html.ValidationMessageFor(model => model.CustomAsset.CustomerName)            

    @Html.HiddenFor(a => a.CustomAsset.CustomerName) 

    </div> 


    <div> 
     <span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.CustomAssetType.Name) </span> 
    @Html.DropDownListFor(model=>model.CustomAsset.CustomTypeID, ((IEnumerable<TMS.Models.CustomAssetType>)ViewBag.CustomTypes).Select(option => new SelectListItem { 
      Text = (option == null ? "None" : option.Name), 
      Value = option.ID.ToString(), 
      Selected = (Model != null) && (Model.CustomAsset != null) && (option.ID == Model.CustomAsset.CustomTypeID) 
     }), "Choose...") <i class=" icon icon-blue icon-star-on "></i> 
     @Html.ValidationMessageFor(model=>model.CustomAsset.CustomTypeID) 
    </div> 
      <div> 
    <span class="f"> @Html.DisplayNameFor(model=>model.CustomAsset.Description) </span>  
    @Html.TextBoxFor(model => model.CustomAsset.Description) 
    @Html.ValidationMessageFor(model => model.CustomAsset.Description)            



    </div>          






      <input type="submit" value="Save" class="btn btn-primary"/> 

} 

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

[HttpPost] 
     [ValidateAntiForgeryToken] 
     [CheckUserPermissions(Action = "Edit", Model = "CustomAsset")] 
     public ActionResult ManageCustomAsset(CustomerCustomAssetJoin ccaj) 
     { 

      if (ModelState.IsValid) 
      { 
       try 
       { 
        string ADusername = User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1); 
        repository.InsertOrUpdateCustomerCustomAsset(ccaj.CustomAsset, ADusername); 
        // repository.Save(); 

        return PartialView("_customerCustomAsset", ccaj); 

       } 
       catch (Exception ex) 
       { 

        //ModelState.AddModelError(string.Empty, "Error occurred: " + ex.InnerException.Message); 
        return Json(new { IsSuccess = "False", description = ex.InnerException.InnerException.Message.ToString() }, JsonRequestBehavior.AllowGet); 
       } 

      } 

      return View(ccaj); 


     } 

ответ

1

Это может быть что-то делать с анти-подделки маркера. Ваш реализация атрибута ValidateAntiForgeryToken на вашем действии, но у вас есть @Html.AntiForgeryToken(), вы забыли на ваш взгляд.

+0

I U ncommented, но все тот же. Я действительно прокомментирую это, поскольку я думал, что это может вызвать проблему. Но, к сожалению, все же я получаю такое же поведение ... если проблема решена этим, по крайней мере, вызов достигнет метода действия, а затем произойдет ошибка, но в моем случае форма ajax.begin не дойдет до метода действия. Я вставил точку останова, но она не дошла до нее .. –

+0

Я обновил свой код .. –

1

Вы добавляете это js?

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

Пример:

Модель:

public class MyViewModel 
{ 
    [Required] 
    public string Foo { get; set; } 
} 

Контроллер:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return Content("Thanks", "text/html"); 
    } 
} 

Вид:

@model AppName.Models.MyViewModel 

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

<div id="result"></div> 

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" })) 
{ 
    @Html.EditorFor(x => x.Foo) 
    @Html.ValidationMessageFor(x => x.Foo) 
    <input type="submit" value="OK" /> 
} 
+0

Да, я уже добавил @section Сценарии { @ Scripts.Render ("~/bundles/jqueryval") } –

+0

Вы видели в браузере этот пакет загружает все js? –

+0

Да, если я изменю имя метода действия, то он будет называть его успешно, но для метода действия ManageCustomAsset он не работает. поэтому да, сценарии загружаются правильно ... –

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