2015-05-30 61 views
0

我有一個搜索功能的主頁。從主頁搜索工作正常,但是當我嘗試使用ajax表單(在url.com/search?id=biology上)再次搜索時,我被重定向到404頁面,說沒有找到/Search阿賈克斯形式沒有得到結果

首頁頁面:

@using (Html.BeginForm("Index", "Search", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Get, new { @class = "form-horizontal", role = "form", enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(m => m.id, new { @class = "form-control" }) 
    <input type="submit" value="Search" class="btn btn-default" /> 
} 

我阿賈克斯形式:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResult" })) 
{ 
    <input class="form-control" data-val="true" data-val-required="The id field is required." id="id" name="id" type="search" value="@Request.QueryString["id"]" /> 
    <span class="field-validation-valid text-danger" data-valmsg-for="id" data-valmsg-replace="true"></span> 

    <div class="form-group"> 
     <input type="submit" value="Search" class="btn btn-default" /> 
    </div> 
} 

@Html.Partial("_Results", Model) 

編輯:這是所產生的Ajax表單的HTML源代碼。

<form action="/Search" data-ajax="true" data-ajax-method="get" data-ajax-mode="replace" data-ajax-update="#searchResult" id="form0" method="post">       
    <input class="form-control" data-val="true" data-val-required="The id field is required." id="id" name="id" type="search" value="biology" /> 
    <span class="field-validation-valid text-danger" data-valmsg-for="id" data-valmsg-replace="true"></span> 

    <div class="col-md-offset-0 col-md-10"> 
     <input type="submit" value="Search" class="btn btn-default" /> 
    </div> 
</form> 

編輯2:從查看開發人員工具,它顯示POST調用正在發生。如何將它更改爲GET這個Ajax表單?

+0

我想你忘記了喲添加動作和控制器的名稱'@ Ajax.BeginForm(「索引」,「搜索」,新AjaxOptions { ...})? – adricadar

回答

1

@ User456789如果您將在兩種情況下查看生成的表單,那麼您會注意到您的Ajax表單的action將與您的主頁表單不同。這是因爲您沒有在上面的註釋中提到您的Ajax助手中提到的ControllerAction。因此,改變你的Ajax表單代碼如下圖所示,它應該按預期工作:

@using (Ajax.BeginForm("Index", "Search", new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResult" })) 
{ 
    <input class="form-control" data-val="true" data-val-required="The id field is required." id="id" name="id" type="search" value="@Request.QueryString["id"]" /> 
    <span class="field-validation-valid text-danger" data-valmsg-for="id" data-valmsg-replace="true"></span> 

    <div class="form-group"> 
     <input type="submit" value="Search" class="btn btn-default" /> 
    </div> 
} 
+0

它仍然給出了同樣的錯誤,「http:// localhost:54286/Search」404錯誤。我編輯了問題,並生成了html。 – User456789

+0

@ User456789如果你確定你有一個'Search'控制器和'Index'動作。然後嘗試看看你是否達到了斷點。因爲你的代碼正如我所料爲我工作。 – lbrahim

+0

@ User456789另外我注意到你的主頁表單的請求方法是'GET',而Ajax表單的方法是'POST',所以如果你在'Search'控制器的'Index'操作中有'[HttpGet]'註釋,它將返回404。 – lbrahim

0

變化:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResult" })) 

要:

@using (Ajax.BeginForm("Index", "Search", new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResult" })) 

你需要的形狀點在MVC控制器正確的行動。確保Index存在並返回Content

+0

它仍然給出同樣的錯誤,http:// localhost:54286/Search 404錯誤。我編輯了問題,並生成了html。 – User456789

+0

我敢打賭它並沒有發射任何Ajax。 'method =「post」'告訴瀏覽器發送POST請求。但是,這應該被JavaScript覆蓋。我會確保在提交表單時點擊事件被捕獲。 – beautifulcoder