对于具有bool
变量的操作,我有两种功能。
[HttpGet]
public ActionResult action(bool data = false)
{
if(data == false)
{
return View("view1");
}
else
{
return View("view2");
}
}
这是一种[httpGet]
方法。某些链接具有的数据布尔值,true
而某些链接具有false
。
该url具有http://localhost:58241/action?data=False
我想从URL中隐藏?data=False
or的属性?data=True
,并且应具有与以前相同的所有功能。
我想要类似的网址 http://localhost:58241/action
提前致谢。
路由与查询字符串参数完全无关。无论如何,您仍然需要将data
参数传输到服务器,以便action方法可以接收它。有3种方法可以做到这一点:
最简单的选项是#1,但是由于您提到了通过URL传递数据是不可接受的,因此您唯一的选择是使用HTTP发布。因此,此答案的其余部分使用#2。
首先,默认路由不会覆盖您对URL(/action
)的选择,因此您需要为此插入一个自定义路由。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Add route to handle /action
routes.MapRoute(
name: "Action",
url: "action",
defaults: new { controller = "Data", action = "Action" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
接下来,您需要一个控制器来处理浏览器中的GET和POST。
public class DataController : Controller
{
public ActionResult Action()
{
return View();
}
[HttpPost]
public ActionResult Action(bool data = false)
{
if (data)
{
return View("view2");
}
return View("view1");
}
}
数据通过POST发送回服务器,因此不需要在URL中传递数据。
最后,您拥有Action.cshtml
从Action
操作方法返回的视图(名为)。它具有2个不同的表单标签,这些表单标签data
根据所单击的按钮提交不同的值。
@{
ViewBag.Title = "Action";
}
<h2>Choose an Option</h2>
@using (Html.BeginForm("action", "Data")) {
<input type="hidden" name="data" value="true" />
<input type="submit" value="With Data" />
}
@using (Html.BeginForm("action", "Data")) {
<input type="hidden" name="data" value="false" />
<input type="submit" value="Without Data" />
}
请注意,如果愿意,您可以完全在JavaScript(AJAX POST)中执行此步骤,这将使您可以使用超链接而不是按钮,或者可以仅使用CSS对按钮进行样式设置使其看起来像是超链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句