javascript - MVC中如何根据点击按钮进入Action并传递参数?

标签 javascript jquery ajax asp.net-mvc asp.net-mvc-4

更新 好吧,我明白我的方向是错误的=)所以,想法:

我的页面上有一个表格(View = Index.cshtml):

<tbody id="SessionListBody">

<tr style="display: none;"> … </tr>
<tr>
    <td id="2" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/Home/MattersSession/2"> … </a>
    </td>
</tr>
<tr>
    <td id="3" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/Home/MattersSession/3"> … </a>
    </td>
</tr>
<tr>
    <td id="4" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/Home/MattersSession/4"> … </a>
    </td>
</tr>
<tr>
    <td id="5" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/Home/MattersSession/5"> … </a>
    </td>
</tr>
<tr>
    <td id="6" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/Home/MattersSession/6"> … </a>
    </td>
</tr>

每行包含按钮。我需要在单击按钮时获取行的第一个 tdid 并将此 id 传递给我的操作:

public ActionResult MattersSession(int sessionPageID)
        {
            DBAccess dba = new DBAccess();
            DataTable dt = dba.GetSessionPage(sessionPageID);
            Session["SourceFileID"] = dt.Rows[0]["SourceFileID"];
            Session["SessionPageID"] = sessionPageID;

            // Generate Table and pass it to the View
            ViewData["MattersTable"] = dt.Rows[0]["MainTableBody"];
            ViewData["SummaryTable"] = dt.Rows[0]["SummaryBody"];

            return View("Matters");
        }

现在,当我单击链接时出现此错误:

The parameters dictionary contains a null entry for parameter 'sessionPageID' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult MattersSession(Int32)' in 'QuickbookUploadFromElite3e.Controllers.HomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

但是我需要这个参数来调用这个方法 DataTable dt = dba.GetSessionPage(sessionPageID);,所以如果我将这个参数设为可选,会不会出现错误?

最佳答案

我将在我的回答中做出一些假设。如果这些假设中的任何一个不正确,请告诉我,我会调整我的答案:

  1. 您正在使用 Bootstrap
  2. 这些按钮将加载一个新页面(本质上是一个 GET 请求)
  3. 您正在从强类型(IEnumerable) View 生成行您使用 ViewData

如果所有这些假设都是正确的,我会通过使用 anchor 链接来解决它,只给它一个按钮的外观。使用 View 的模型获取每个项目的 ID。

@foreach(var item in ViewData["MattersTable"]){
<tr>
    <td id="@item.Id" class="date"> … </td>
    <td> … </td>
    <td>
        <a class="btn btn-primary btn-sm" href="/myController/MattersSession/@item.Id"> "Button" Text </a>
    </td>
</tr>
}

此外,您会收到空参数错误,因为您的路由可能设置为 {controller}/{action}/{id} 所以它假定第三段中的任何内容都将被绑定(bind)通过名为 id 的参数,但您已在操作方法中将参数命名为 SessionPageId,因此它无法找到绑定(bind)。

关于javascript - MVC中如何根据点击按钮进入Action并传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530306/

相关文章:

javascript - 将输出从 ToDataURL() 传递到 ASP.NET 代码后面的方法?

php - Selenium 测试在执行 javascript 时随机崩溃

javascript - Metro UI 库 : Css not loading

php创建DOM元素并使用ajax发送

jquery - 为什么 IE 和 Ajax 有这么多问题?

javascript - 正确加载多个 webpack 包

javascript - 创建自定义 EventEmitter 时是否需要 events.EventEmitter.call(this)?

javascript - 如何使用 Javascript/jQuery 解决游戏逻辑中的错误

javascript - jquery slider - 滑动功能在不应该的时候取消

javascript - AJAX 调用不起作用,正在寻找错误的操作?