在视图中我有这样的事情:
<ul data-role="listview" data-inset="true" data-theme="b" data-split-icon="delete">
@foreach (DataModel.Vulnerability.Fix item in Model.VulnerabilityFixes)
{
<li><a href="@Url.Action("Details", "Product", new { Title = item.Title })">
<h2>@item.Title</h2>
<table style="width: 100%">
<tr>
<th>Id</th>
<th>FixName</th>
<th>Vendor</th>
<th>Version</th>
</tr>
<tr>
<td>@MyHelper.decodeNull(item.Id)</td>
<td>@MyHelper.decodeNull(item.FixName)</td>
<td>@MyHelper.decodeNull(item.Vendor)</td>
<td>@MyHelper.decodeNull(item.Version)</td>
</tr>
</table>
</a>
<a href="@Url.Action("DeleteFix", "Editing", new { vulnId = Model.Id, fix = item })">Delete</a>
</li>
}
</ul>
正如您所看到的,它显示了一个表,此表有一个删除按钮,单击在 EditingController 类上调用 DeleteFix()方法,此方法采用2个参数那是:
vulnId = Model.Id ,长
当前项目是 DataModel.Vulnerability.Fix 对象。
所以这是 DeleteFix()的代码定义到我的 EditingController 类:
public ActionResult DeleteFix(long vulnId = 0, DataModel.Vulnerability.Fix currentFix)
{
DataModel.Vulnerability.Fix model = new DataModel.Vulnerability.Fix();
manager.openConnection();
try
{
model = currentFix;
}
finally
{
manager.closeConnection();
}
return View(model);
}
问题是,在此方法的签名上给出以下错误,引用第二个输入参数( DataModel.Vulnerability.Fix 对象)。它告诉我:
错误14必要后,必须显示可选参数 参数C:\ Develop \ EarlyWarning \ public \ Implementazione \ Ver2 \ WebPortal \ WebPortal \ Controllers \ EditingController.cs 27 94 WebPortal
为什么呢?我错过了什么?如何将以前的 DataModel.Vulnerability.Fix 项目对象从我的视图传递到 DeleteFix()控制器方法?
答案 0 :(得分:4)
检查您的功能签名:
public ActionResult DeleteFix(long vulnId = 0, DataModel.Vulnerability.Fix currentFix)
交换输入参数:
public ActionResult DeleteFix(DataModel.Vulnerability.Fix currentFix, long vulnId = 0)
错误现在消失了。原因是所有未获得默认值的参数 (currentFix
)必须出现在所有获取默认值的参数之前({{1} })
<强>更新强>
@ Neel的回答也是正确的,但与你提到的错误无关
它不是错误的原因,但它也需要修复。假设这不是SO问题中的拼写错误:)
答案 1 :(得分:2)
在您的actionlink中进行如下更改,并将currentFix
代替fix
并更改顺序如下: -
(建议更平坦)
public ActionResult DeleteFix(DataModel.Vulnerability.Fix currentFix, long vulnId = 0)
并在视野中
<a href="@Url.Action("DeleteFix", "Editing", new { currentFix = item, vulnId = Model.Id, })">Delete</a>
答案 2 :(得分:2)
在C#中,您无法在非可选参数之前声明可选参数。 将您的控制器操作更改为:
public ActionResult DeleteFix(DataModel.Vulnerability.Fix currentFix, long vulnId = 0)