NAJ*_*NAJ 5 javascript ajax asp.net-mvc
嗨,我对 Web 开发很陌生,并且被困在特定场景中。
我有一个带有两种方法的 Map 控制器:
public ActionResult Map1(double easting, double northing)
public ActionResult Map2(double easting, double northing)
Run Code Online (Sandbox Code Playgroud)
当被调用时,它们都使用所需的任何模型导航其相应的视图:
return View(model);
Run Code Online (Sandbox Code Playgroud)
然后我有一些 javascript 需要根据传递的动作调用相应的控制器方法。
我想将控制器方法标记为 [HttpPost],但是当我这样做时,然后在 javascript 中使用 ajax 请求,对 View 的调用被吞并并且页面没有被重定向。
目前,我让它工作的唯一方法是:
window.location.href = '/Map/' + actionVal + '?easting=' + easting + '&northing=' + northing;
Run Code Online (Sandbox Code Playgroud)
但是使用这个我不能将方法设置为 POST。
有没有人对我应该如何做到这一点有更好的想法?
有人对我应该如何做有更好的想法吗?
实际上,您不需要有TWO不同的控制器操作,而可以只具有ONE. 此操作将返回您想要显示的视图。
进行 POST 的一种方法是使用HTML.BeginForm()控制器和操作名称并将其传递FormMethod.POST给 BeginForm()。在 BeginForm 中,您可以使用 Submit 类型的 HTML 输入按钮来对控制器操作进行 POST 调用。
另外,如果您想区分此控制器操作的调用,我建议您这样 -
首先使用Type变量构建这样的模型,通过变量您可以区分需要对数据执行的操作 -
public class Details
{
public string easting { get; set; }
public string northing { get; set; }
public string type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
让你的控制器动作像这样定义 -
[HttpPost]
public ActionResult Map(Details details)
Run Code Online (Sandbox Code Playgroud)
你可以让你的视图定义HiddenField这样的 -
@model Namespace.Details
@{
ViewBag.Title = "Title";
}
<div id="uploadCourseList">
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
@* Other properties of Model *@
@Html.HiddenFor(m => m.type)
<input type="submit">
}
</div>
Run Code Online (Sandbox Code Playgroud)
现在在视图上设置type,以便您可以区分后操作并对数据执行必要的计算并返回视图。