C# MVC&x2B;T4MVC-如何将url操作传递给表单?还是生成操作/id的替代方法?

C# MVC&x2B;T4MVC-如何将url操作传递给表单?还是生成操作/id的替代方法?,c#,asp.net-mvc,asp.net-mvc-4,t4mvc,C#,Asp.net Mvc,Asp.net Mvc 4,T4mvc,我在一个模型中循环,在数据中迭代。我想在每个生成操作/id的项目上添加一个按钮 由于无法向按钮添加url,我决定使用具有以下内容的表单: <form action="@Url.Action("ItemDetail", new { itemId = @quote.Item.ItemID})"> <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit"> <i cl

我在一个模型中循环,在数据中迭代。我想在每个生成操作/id的项目上添加一个按钮

由于无法向按钮添加url,我决定使用具有以下内容的表单:

<form action="@Url.Action("ItemDetail", new { itemId = @quote.Item.ItemID})">
    <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit">
        <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
    </button>
</form>
路线图:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

对于T4MVC,类似这样的功能应该可以工作:

<form action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
…至少在这里,MVC摆脱了您的魔法字符串,即使您仍然在使用MVC的开箱即用
Url.Action
重载

您还应该使用
camelCase
,而不是
PascalCase
,来命名操作方法参数:

public virtual ActionResult ItemDetail(int itemId) // instead of ItemID
{
    return View();
}
…虽然我不认为这会引起任何问题

更新

试试这个吧

<form method="GET" action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">

或者这个:

<form method="GET" action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name)">
    <input type="hidden" name="itemId" value="@quote.Item.ItemID" />
    <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit">
        <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
    </button>
</form>

查看询价单
另一个更新:

您也可以这样做,然后使用CSS使链接看起来像按钮:

<a href="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
    <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
</a>


IMHO,这是您真正应该做的,因为您只发送了一个参数。

对于T4MVC,类似这样的功能应该可以工作:

<form action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
…至少在这里,MVC摆脱了您的魔法字符串,即使您仍然在使用MVC的开箱即用
Url.Action
重载

您还应该使用
camelCase
,而不是
PascalCase
,来命名操作方法参数:

public virtual ActionResult ItemDetail(int itemId) // instead of ItemID
{
    return View();
}
…虽然我不认为这会引起任何问题

更新

试试这个吧

<form method="GET" action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">

或者这个:

<form method="GET" action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name)">
    <input type="hidden" name="itemId" value="@quote.Item.ItemID" />
    <button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit">
        <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
    </button>
</form>

查看询价单
另一个更新:

您也可以这样做,然后使用CSS使链接看起来像按钮:

<a href="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
    <i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
</a>


这是您真正应该做的,因为您只发送了一个参数。

尝试使用@Url.Action(“Action”、“CONTROLLER”、new{itemId=@quote.Item.itemId})或@Url.Action(“Action”、“CONTROLLER”、null、new{itemId=@quote.Item.itemId})你能把控制器代码放在这里吗?@Zaphod忘了提到我正在使用T4MVC@renefc3按要求。我已经更新了我的问题。尝试使用@Url.Action(“Action”、“CONTROLLER”、new{itemId=@quote.Item.itemId})或@Url.Action(“Action”、“CONTROLLER”、null、new{itemId=@quote.Item.itemId})你能把控制器代码放在这里吗?@Zaphod忘了提到我正在使用的T4MVC@renefc3按要求。我已经更新了我的问题。嘿,谢谢,尽管我仍然得到相同的结果。编辑:当我检查chrome的开发者工具时,它确实有效!但是,当我单击按钮时,我得到:Quote/itemdail?在url中bar@DarkShadowAY-所以MVC正在呈现正确的href属性,但当您单击它时,querystring参数将从URL中剥离?我不知道你所说的“它在chrome开发工具中工作”是什么意思。如果是这种情况,请检查fiddler以查看请求发生了什么(可能MVC出于某种原因正在重定向它)。是的,当我使用web developer检查表单操作时,它会生成:/Quote/ItemDetail?itemId=4084。但是,当我点击按钮时,我得到:?-它似乎并没有起到什么作用action@DarkShadowAY你的路线看起来不错。使用Fiddler检查单击链接后发生的HTTP请求和响应。当您将鼠标悬停在链接上时,我假设您在页面底部看到了正确的URL?如果是这样,当服务器接收到请求时,会发生其他事情。Fiddler应该能帮你解决这个问题。嘿,谢谢,尽管我还是得到了同样的结果。编辑:当我检查chrome的开发者工具时,它确实起作用了!但是,当我单击按钮时,我得到:Quote/itemdail?在url中bar@DarkShadowAY-所以MVC正在呈现正确的href属性,但当您单击它时,querystring参数将从URL中剥离?我不知道你所说的“它在chrome开发工具中工作”是什么意思。如果是这种情况,请检查fiddler以查看请求发生了什么(可能MVC出于某种原因正在重定向它)。是的,当我使用web developer检查表单操作时,它会生成:/Quote/ItemDetail?itemId=4084。但是,当我点击按钮时,我得到:?-它似乎并没有起到什么作用action@DarkShadowAY你的路线看起来不错。使用Fiddler检查单击链接后发生的HTTP请求和响应。当您将鼠标悬停在链接上时,我假设您在页面底部看到了正确的URL?如果是这样,当服务器接收到请求时,会发生其他事情。提琴手应该帮你弄清楚。