2013-03-05 6 views
0

Я хотел бы подтвердить, если это ограничение дизайн или, если я делаю что-то неправильно:Ajax.ActionLink создан из Ajax.BeginForm в RenderPartial View

У меня есть вид с двумя RenderPartials:

@model Heelp.ViewModels.CompanyIndexViewModel 

@{ Html.RenderPartial(MVC.Company.Views.IndexSearch, Model.SearchViewModel); } 
@{ Html.RenderPartial(MVC.Company.Views.IndexMap, Model.MapViewModel); } 

В первом частичного вида у меня есть Ajax.BeginForm:

@model Heelp.ViewModels.CompanyIndexSearchViewModel 

@using (Ajax.BeginForm(MVC.Company.CategoryGetAllBySearch(), new AjaxOptions { UpdateTargetId = "searchCompanyResults", InsertionMode = InsertionMode.Replace }, new { @id = "searchBoxWrap" })) 
{ 
    @Html.AntiForgeryToken() 

    @Html.HiddenFor(m => m.IsCenterFromUser) 
    @Html.HiddenFor(m => m.CenterLat) 
    @Html.HiddenFor(m => m.CenterLng) 
    @Html.HiddenFor(m => m.Zoom) 
    @Html.HiddenFor(m => m.SearchRadius) 

    @Html.TextBoxFor(m => m.Search, new { @placeholder = @HeelpResources.CompanyIndexViewSearchPlaceholder }) 
    <input type="button" value="«" id="clearKeywords"/> 
    @Html.TextBoxFor(m => m.Location, new { @placeholder = @HeelpResources.CompanyIndexViewLocationPlaceholder }) 
    <input type="button" value="«" id="clearLocation"/> 
    <input type="button" value="X" id="hereButton"/> 
    <input type="submit" value="@HeelpResources.CompanyIndexViewSearchButtonLabel"/> 
} 
<div id="searchCompanyResults" class="clearfix" style="z-index: 10; position: absolute; width: 400px;"></div> 

Ajax.BeginForm генерирует PartialView в searchCompanyResults DIV со списком Ajax.ActionLink-х:

@model Heelp.ViewModels.CategoryGetAllBySearchListViewModel 

<p class="float-left margin-top align-left"><span>Encontrámos <em><a href="#">@Model.TotalSearchCount</a></em> resultados nas categorias:</span></p> 
<div class="clear-both"> 
    <div id="searchResultsList" class="float-left"> 
     <ul> 
      @foreach (var item in Model.CategoryGetAllBySearch) 
      { 
       <li> 
        @Ajax.ActionLink(
         String.Format("{0} {1} ver »", item.SearchCount, item.Name), 
         MVC.Company.GetAllByCategory(item.Id, Model.Search, Model.Location, Model.IsCenterFromUser, Model.CenterLat, Model.CenterLng, Model.SearchRadius), 
         new AjaxOptions { OnBegin = "CompanyGetAllByCategoryOnBegin(" + item.Id + ")", OnSuccess = "CompanyGetAllByCategoryOnSuccess" }) 
       </li> 
      }   
     </ul> 
    </div> 
</div> 

Проблема здесь состоит в том, что, если я не включать ссылку на "< сценарий SRC =" ~/Scripts/jquery.unobtrusive-ajax.min.js ">" в PartialView действия. Ссылка возвращает текст Json.

EDIT: Я обнаружил, что когда я нажимаю Action.Link, подача выполняется 2 раза в первый раз, а 4 - вторая, и так далее, почему? Должен ли я это сделать?

ответ

0

Если вы хотите использовать , Ajax.ActionLink и другие от Ajax, вы должны включить jquery.unobtrusive-ajax.js файл в свой макет. Он содержит код, который перехватывает щелчок по ссылке и передает форму, отменив действие и перевернув AJAX.

Вам не нужно включать этот файл в частичные просмотры дважды.

+0

Привет, спасибо. Если в представлении, который вызывает RenderPartial, он не работает, только в частичном представлении, которое перечисляет Ajax.Actions – Patrick