1

int型の「CourseID」でデータベースの「Courses」を検索する必要があります。「CourseID」というテキスト フィールドが 1 つだけある単純な検索ビュー フォームがあります。

<% using (Html.BeginForm())
   { %>
    <%= Html.AntiForgeryToken() %>
    <fieldset>
        <legend> Search By Course ID#:</legend>
            <label for="CourseID">Enter Course ID#:</label>
            <%= Html.TextBox("CourseID", Model.CourseID) %>
            <%= Html.ValidationMessage("CourseID", "*") %>
    </fieldset>
    <p>
        <input type="submit" value="Submit" />
    </p>
<% }%>

Controller クラスには、SearchCourse アクション メソッドがあります。

// GET: /SearchCourse
    [Authorize(Roles = "Administrator")]
    public ActionResult SearchCourse(int courseID)
    {

        return View(new SearchCourse(
            new List<Courses>().AsQueryable(), courseID));
    }

    //

アプリケーションを実行すると、次のエラー メッセージが表示されます。

「/」アプリケーションでサーバー エラーが発生しました。パラメーター ディクショナリには、'Certifications.Controllers.SearchCourseController' のメソッド 'System.Web.Mvc.ActionResult SearchCourse(Int32)' の null 非許容型 'System.Int32' のパラメーター 'courseID' の null エントリが含まれています。パラメーターをオプションにするには、その型を参照型または Nullable 型にする必要があります。パラメータ名: パラメータ

コードのどこが間違っているかを理解するのを手伝ってください。パラメータを「int」型から「string」型に変更すると、このエラーは発生しません。ご助力ありがとうございます!

4

3 に答える 3

0

MVC アプリに付属のデフォルト ルートを使用している場合:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

ビューとクライアント側の値をclientIDアクションにマッピングしていない理由は、ルートの url パラメーターがアクションのパラメーター名と一致しないためです。それらは一致する必要があります。

パラメータを次のように変更します。

public ActionResult SearchCourse(int id)
于 2013-04-18T23:29:37.147 に答える
0

その理由は、入力した courseID を送信していないビューです。次のように変更します

 <% Html.EditorFor(model=> Model.CourseID)%>
于 2013-04-18T23:30:43.013 に答える