我試圖通過Ajax調用MVC操作失敗。當我這樣做,就會出現以下錯誤:如何在ASP.NET MVC中通過AJAX正確調用POST操作方法
HttpException: A public action method 'Find' was not found on controller 'MyProject.Controllers.LoanController'.
的操作方法我試圖調用具有以下特徵:
[Route("Loan/Find/{loanNumber:int}")]
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
[ActionName("Find")]
[AllowAnonymous]
public ActionResult Find(int loanNumber)
{
var model = new LoanStatusModel
{
Record = Repository.GetRecord(loanNumber),
User = this.SecurityPrincipal
};
return this.PartialView("LoanStatusSearchResult", model);
}
試圖調用它是如下視圖代碼:
@using(Ajax.BeginForm("Find", new AjaxOptions
{
HttpMethod = "POST",
AllowCache = false,
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "ajaxTarget",
LoadingElementId="loader"
}))
{
<fieldset>
<div class="col-sm-3">
<input type="text"
id="loanNumber"
name="loanNumber"
value="@Model.LoanNumber"
class="form-control"
minlength="8"
maxlength="10"/>
</div>
<div class="col-sm-7">
<input type="submit"
value="Search"
class="btn btn-primary"/>
</div>
</div>
</fieldset>
}
<div id="loader" style="display:none">
Working, please wait...
</div>
<div id="ajaxTarget">
</div>
這是我RouteConfig.cs的內容:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
Fidler報告,對路由的請求導致HTTP 401未授權,這種情況有意義,因爲這是最初配置爲禁用匿名訪問的Intranet站點。但是,匿名訪問已啓用,並且錯誤仍然存在。
要解決這個問題,我已經嘗試了所有通過互聯網(StackOverflow的特別)搜索後執行以下操作:
- 我改變了IIS接受匿名請求,並重新啓動服務器。這對結果沒有影響。
- 最初,行動方法是用
HttpPostAttribute
裝飾的。將其改爲使用AcceptVerbs
對結果沒有影響。 - 我在該方法中加入了
AllowAnonymous
,它對結果沒有影響。
如何解決此問題?它可以解決嗎?我還需要提供哪些其他信息?
OH。 MY。神。我不能相信我錯過了這一點。 (/ epicfacepalm)你不會相信我忽略了多少次。救命恩人,老兄。 –
我用自定義ajax解決方案更新了答案。乾杯:) – Shyju
我實際上修好了路線。我們希望它成爲/貸款/狀態並在表格中傳遞數據。老派的網址在這裏是個不錯的選擇。 –