我当前的网址为/Product/Create?date=5/7/2014%2012:00:00%20AM
其实我想要这样:/ Product / Create
我的示例代码是:
public class ProductController : Controller
{
public ActionResult Create(DateTime date)
{
ViewBag.Date = date;
return View();
}
}
任何人都可以帮助我?
答案 0 :(得分:2)
您可以使用HttpPost
强制执行此操作:
public class ProductController : Controller
{
[HttpPost]
public ActionResult Create(DateTime date)
{
ViewBag.Date = date;
return View();
}
}
在致电行动时,您需要通过表格提交。如果您向我们展示您如何称呼它的代码,我们可以帮助您...
HttpPost
attribut将强制您使用" post" - 如果你还想要"其他选项"你可以放弃这个属性,只需使用" post"为你理想的情况。
更新:
您需要调用以下操作:
@using(Html.BeginForm("Create", "Product", FormMethod.Post))
{
@Html.Hidden("date", DateTime.Now.ToString())
<input type="submit" value="create">
}
到目前的代码<a href="/Product/Create?date=@DateTime.Now.Date">
:
这会创建一个GET请求,即使您希望这样做,也应该执行以下操作:
@Html.ActionLink("Create", "Product", new { date = DateTime.Now.ToString() })
这将在帐户中采用正确的路由并创建有效的链接。
使用例如JQuery
如果启用了JS,您可以执行以下操作:
@using(Html.BeginForm("Create", "Product", FormMethod.Post, new { id = "myForm" }))
{
@Html.Hidden("date", DateTime.Now.ToString())
<input id="myFormSubmit" type="submit" value="create">
<a id="myFormLink" href="#" style="display: none;" onclick="$('#myForm').submit(); return false;">create</a>
}
<script type="text/javascript">
$(document).ready(function () {
$('#myFormLink').show();
$('#myFormSubmit').hide();
});
<script>
答案 1 :(得分:2)
假设这实际上是对需要Date
参数的视图的GET请求(无论出于何种原因)我说你最好的选择是将信息作为请求中的自定义标头传递< / p>
GET /Products/Create HTTP/1.1
X-YourApp-Date: 2014-07-05T12:00:00
您的行为将如下所示
public ActionResult Create() <-- no parameters
{
ViewBag.Date = DateTime.ParseExact(Request.Headers["X-YourApp-Date"],
"yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
return View();
}
一些附注
答案 2 :(得分:1)
此外,控制器更改仅处理POST请求
...
[HttpPost]
public ActionResult Create(DateTime date)
...
您还必须将标记中调用操作的代码从链接更改为
@using(Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { style = "display:inline" })) {
@Html.Hidden("date", DateTime.Now.ToString())
<a href="#" onclick="this.parentNode.submit(); return false">Whatever</a>
}
答案 3 :(得分:1)
在JS中:
window.history.pushState("", "", "/Product/Create");