Url.Action 没有命中控制器方法
Url.Action not hitting controller method
我有一个 table 包含指向控制器中方法的链接。
table 在带有提交按钮的表单中找到。
以下是我的看法:
@using (Html.BeginForm("SaveClient", "Client", FormMethod.Post))
{
@Html.AntiForgeryToken()
string language = ViewBag.Language;
<div class="table-wrapper">
<table width="100%">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Client.ClientCode)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Surname)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Email)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.ContactNumber)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.ClientMatches)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ClientCode)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.ContactNumber)
</td>
<td>
<button onclick="location.href='@Url.Action("ShowClient", "Client", new { id=item.ClientCode})'">
<i class="icon-arrow-right"></i>
</button>
</td>
</tr>
}
</tbody>
</table>
</div>
@Html.HiddenFor(m => m.Client.Surname, Model.Client.Surname)
@Html.HiddenFor(m => m.Client.Name, Model.Client.Name)
@Html.HiddenFor(m => m.Client.ContactNumber, Model.Client.ContactNumber)
@Html.HiddenFor(m => m.Client.Email, Model.Client.Email)
@Html.HiddenFor(m => m.Client.Comments, Model.Client.Comments)
<div class="mdl-card__actions centered">
<button>
Create New
</button>
</div>
}
我在 ClientController 中的 ShowClient 方法:
public ActionResult ShowClient(string clientCode)
{
if (clientCode == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
*some other actions*
}
当我单击“新建”按钮时,它工作正常。但是当我点击 table 中的 Url.Action 时,我的 ShowClient 方法没有被点击。
知道我可能做错了什么吗?
谢谢
您需要使用锚标记而不是按钮,
实际上你在表单中有一个按钮,所以当你点击按钮时它会提交表单并且你的点击操作不会执行,
<a href="@Url.Action("ShowClient", "Client", new { clientCode=item.ClientCode})">
<i class="icon-arrow-right"></i>
</a>
并且查询字符串参数应该是 clientCode
而不是 id
因为你在操作方法
中有参数名称 clientCode
还有一个建议:你需要删除表单,因为你在这里没有提交任何东西,你的视图的目的只是显示记录和导航特定的ClientCode
,
并添加一个 link 用于使用锚
创建
只需使用@Html.ActionLink()
:
@Html.ActionLink("ShowClient", "ShowClient", "Client", new { id=item.ClientCode }, new { @class = "btn btn-primary btn-sm" })
对于更复杂的类型,例如添加自定义图像或图标,您可以使用 <a>
标签,或者,对于您的示例,您可以使用 Font Awesome's directional icons.
我有一个 table 包含指向控制器中方法的链接。 table 在带有提交按钮的表单中找到。
以下是我的看法:
@using (Html.BeginForm("SaveClient", "Client", FormMethod.Post))
{
@Html.AntiForgeryToken()
string language = ViewBag.Language;
<div class="table-wrapper">
<table width="100%">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Client.ClientCode)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Surname)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.Email)
</th>
<th>
@Html.DisplayNameFor(model => model.Client.ContactNumber)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.ClientMatches)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ClientCode)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.ContactNumber)
</td>
<td>
<button onclick="location.href='@Url.Action("ShowClient", "Client", new { id=item.ClientCode})'">
<i class="icon-arrow-right"></i>
</button>
</td>
</tr>
}
</tbody>
</table>
</div>
@Html.HiddenFor(m => m.Client.Surname, Model.Client.Surname)
@Html.HiddenFor(m => m.Client.Name, Model.Client.Name)
@Html.HiddenFor(m => m.Client.ContactNumber, Model.Client.ContactNumber)
@Html.HiddenFor(m => m.Client.Email, Model.Client.Email)
@Html.HiddenFor(m => m.Client.Comments, Model.Client.Comments)
<div class="mdl-card__actions centered">
<button>
Create New
</button>
</div>
}
我在 ClientController 中的 ShowClient 方法:
public ActionResult ShowClient(string clientCode)
{
if (clientCode == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
*some other actions*
}
当我单击“新建”按钮时,它工作正常。但是当我点击 table 中的 Url.Action 时,我的 ShowClient 方法没有被点击。 知道我可能做错了什么吗? 谢谢
您需要使用锚标记而不是按钮,
实际上你在表单中有一个按钮,所以当你点击按钮时它会提交表单并且你的点击操作不会执行,
<a href="@Url.Action("ShowClient", "Client", new { clientCode=item.ClientCode})">
<i class="icon-arrow-right"></i>
</a>
并且查询字符串参数应该是 clientCode
而不是 id
因为你在操作方法
clientCode
还有一个建议:你需要删除表单,因为你在这里没有提交任何东西,你的视图的目的只是显示记录和导航特定的ClientCode
,
并添加一个 link 用于使用锚
创建只需使用@Html.ActionLink()
:
@Html.ActionLink("ShowClient", "ShowClient", "Client", new { id=item.ClientCode }, new { @class = "btn btn-primary btn-sm" })
对于更复杂的类型,例如添加自定义图像或图标,您可以使用 <a>
标签,或者,对于您的示例,您可以使用 Font Awesome's directional icons.