[英]Why I can't pass this object from a view to a controller method?
在視圖中,我有這樣的事情:
<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()方法,並且該方法有兩個參數:
vulnId = Model.Id這是一個長
當前項是DataModel.Vulnerability.Fix對象。
因此,這是我的EditingController類中定義的DeleteFix()的代碼:
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()控制器方法?
檢查您的功能簽名:
public ActionResult DeleteFix(long vulnId = 0, DataModel.Vulnerability.Fix currentFix)
交換輸入參數:
public ActionResult DeleteFix(DataModel.Vulnerability.Fix currentFix, long vulnId = 0)
錯誤現在消失了。 原因是所有未獲得默認值 ( currentFix
)的參數必須出現在所有獲得默認值 ( long vulnId = 0
)的參數之前
更新
@Neel的答案也是正確的,但與您提到的錯誤無關。
這不是錯誤的原因,但它也需要修復。 假設這不僅僅是SO問題中的錯別字:)
如下所示在您的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>
在C#中,您不能在非可選參數之前聲明可選參數。 將您的控制器操作更改為:
public ActionResult DeleteFix(DataModel.Vulnerability.Fix currentFix, long vulnId = 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.