【问题标题】:asp.net mvc framework information propagationasp.net mvc框架信息传播
【发布时间】:2009-01-29 15:47:22
【问题描述】:

我有一个 asp 页面,其中包含一个包含两个字段的表单,客户应该在其中写入他/她的信息。

<td><%=Html.TextBox("Date")%></td>
<td><%=Html.TextBox("City")%></td>

我的操作签名(目前)如下所示:

public ActionResult XXX(string Date, string City) {...}

问题是我想将一个简单的整数从我的视图传播到动作。是否有可能有一个隐藏的文本框或类似的东西? 我希望我的动作签名看起来像这样:

public ActionResult CreateCourseDate(string Date, string City, int id) 

【问题讨论】:

    标签: c# asp.net html asp.net-mvc


    【解决方案1】:

    有两种方法可以做到这一点。要么使用隐藏字段方法(我不建议这样做),要么将其添加到 url(路由值)。后者更适合 MVC 喜欢的类似 REST 的 url。因此,如果您使用的是新表单,那么您的网址将如下所示:

    http://example.com/course/newcoursedate/1
    

    这将编辑 ID 为 1course。您将有一个相应的 create 操作,您的新表单将发布到该操作。下面的示例假定您的视图使用Course 模型进行强类型化。如有必要,您还可以将 id 从 ViewData 中提取出来。

    <% using (Html.BeginForm( "CreateCourseDate",
                              "Course",
                              new { id = ViewData.Model.CourseID }, ...
    
        ...
    
        <td><%=Html.TextBox("Date")%></td>
        <td><%=Html.TextBox("City")%></td>
    
    <% } %>
    

    我没有看参数的顺序,但我相信至少有一个签​​名在控制器名称之后有路由值。请咨询源(或智能感知)以确定。

    【讨论】:

      【解决方案2】:

      你可以像这样传递额外的值:

      <%  using (Html.BeginForm("YourActionName", "YourControllerName", new { id = yourid })) { %>
      ...
      <td><%=Html.TextBox("Date")%></td>
      <td><%=Html.TextBox("City")%></td>
      ...
      <input type="submit" value="Submit" />
      <% } %>
      

      【讨论】:

        【解决方案3】:

        是的,一个隐藏的输入将为此工作。显然,它必须在同一个表格上。

        使用 Html.Hidden。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多