簡體   English   中英

為什么我不能將此對象從視圖傳遞到控制器方法?

[英]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()方法,並且該方法有兩個參數:

  1. vulnId = Model.Id這是一個

  2. 當前項是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM