首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@Html.Beginform传递params

使用@Html.Beginform传递params
EN

Stack Overflow用户
提问于 2013-10-08 05:45:15
回答 1查看 4.4K关注 0票数 0

我得到了可怕的“参数字典包含非空类型参数‘设备’的空条目”,当试图用表单传递数据时,错误。我已经搜索过谷歌和堆栈溢出的答案和解释,但我得出的结论是,这个问题对我来说是不理解这些东西是如何工作的。从传统的编程背景来看,网络内容在我看来并不那么直观。

这是我的视图代码

代码语言:javascript
复制
@using (Html.BeginForm("CreateReservation", "ReservationList", FormMethod.Get, new { @equipmentID = 1 }))
{
  <button class="btn btn-blue">Click</button>
}

这是我的控制器

代码语言:javascript
复制
public ActionResult CreateReservation(int equipmentid)
{
    // TODO: Query the piece of equipment being reserved.
    return View();
}

有人能告诉我我到底做错了什么吗?从我以前读过的答案和我看过的例子来看,我觉得这是可行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-08 05:59:49

我从您的代码中假设这是一个Asp.Net MVC项目,使用C#作为语言。

有几个问题。首先,equipmentID变量没有传递给视图。有许多方法可以做到这一点。最简单的方法是在控制器中使用ViewData字典,如下所示:

代码语言:javascript
复制
public ActionResult CreateReservation(int equipmentid)
{
    // TODO: Query the piece of equipment being reserved.

    ViewData["equipmentID"] = equipmentid;

    return View();
}

完成此操作后,可以修改视图代码以使用以下值:

代码语言:javascript
复制
@using (Html.BeginForm("CreateReservation", "ReservationList", FormMethod.Get, new { equipmentID = ViewData["equipmentID"] }))
{
  <button class="btn btn-blue">Click</button>
}

对于一两个值来说,这是可以的,但是当视图变得更复杂时,您更希望创建一个ViewModel类,并将该类传递给您的视图。

第二,在您的equipmentID调用中使用BeginForm前面的@表示您可能需要研究一下Razor语法。菲尔·哈克的Razor语法快速参考是一个很好的起点。剃刀语法告诉解析器视图的哪些部分是静态的,应该按原样输出,哪些部分是C#代码,在发送到浏览器之前应该执行这些代码。如果您使用Visual作为您的IDE,那么它非常擅长突出显示您的代码的哪些部分被解释为C#代码,哪些部分被解释为普通的HTML。

在下面的截图中,您可以看到VS2012用浅灰背景颜色突出显示C#代码。@符号是C#代码的开始-所以您不需要再次使用它,除非您突破了C#块并返回到C#。

第三,您可能不希望将设备ID作为HTML属性传递到表单标记中。您应该在表单主体中创建一个隐藏的表单字段,并将名称设置为equipmentID,将值设置为变量的值。当前使用它的方式将向form标记添加一个HTML属性,生成的代码如下所示:

代码语言:javascript
复制
<form action="/ReservationList/CreateReservation" method="get" equipmentID="1">

而这个额外的属性在您的代码中是不可检索的。相反,在你看来,应该这样做:

代码语言:javascript
复制
@using (Html.BeginForm("CreateReservation", "ReservationList", FormMethod.Get, new { name = "myFormName", id = "myFormID" }))
{
    @Html.Hidden("equipmentID", ViewData["equipmentID"])
    <button class="btn btn-blue">Click</button>
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19239971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档