表单中的更改未发送到控制器
本文关键字:控制器 表单 | 更新日期: 2023-09-27 18:28:46
我正在尝试发回输入字段的内容,如下所示。
@model Bike
@using (Html.BeginForm("BikeStore", "Home", FormMethod.Post))
{
<input type="text" value="@Model.Color" />
<input type="submit" value="Save"/>
@Html.ActionLink("Cancel", "Bikes", "Home")
}
操作和模型声明如下。
public ActionResult BikeStore(Bike bike)
{
...
return RedirectToAction("Bikes");
}
public partial class Bike
{
[Key] public Guid Id{get; set;}
[Required, StringLength(999)] public string Color { get; set; }
}
我遇到了方法中的断点BikeStore
但传入bike
为空,即它不为空,但所有字符串都是,guid 为 00..00 等。
我尝试了不同的变量类型。我还测试了FormMethod.Get
并(当然不是同时(添加HttpPost
属性。没有运气。
Asp.Net MVC 绑定程序系统使用输入元素的名称绑定到相应的属性或参数。因此,更改此行:
<input type="text" value="@Model.Color" />
自:
@Html.TextBoxFor(m => m.Color)
这将生成以下 html(例如(:
<input type="text" id="Color" name="Color" value="Black" />
请记住,您可以使用另一个帮助程序,该帮助程序可让您硬键入值的名称:
@Html.TextBoxFor("Color")
或者,您可以像以前一样编写纯 html 并添加 name 属性,但 Asp.Net 决定元素的名称必须是什么。
<input type = "text"
name = "@Html.NameFor(m => m.Color)"
value = "@Model.Color" />
如果我们想总结答案的结果,那么我们来写一下每个版本的优缺点:
强类型版本 - 这些帮助程序只能与强类型视图一起使用。这些帮助程序生成的 HTML 没有任何不同,但我们在项目中使用强类型帮助程序方法,因为它们减少了因错误键入属性名称而导致错误的机会。
硬类型版本 - 字符串参数用于搜索
ViewData
、ViewBag
和视图模型,以查找可用作输入元素基础的相应数据项。所以,例如,如果你打电话@Html.TextBox("DataValue")
,MVC框架试图找到一些与键DataValue
相对应的数据项。检查以下位置:ViewBag.DataValue
和Model.DataValue
。找到的第一个值用于设置生成的 HTML 的值属性。(对于@Model.DataValue
,最后一个检查仅在视图的视图模型包含名为DataValue
的属性或字段时才有效。如果我们指定一个字符串,如DataValue.First.Name
,搜索变得更加复杂。MVC 框架将尝试点分隔元素的不同排列方式,如下所示:
• ViewBag.DataValue.First.Name • ViewBag.DataValue["First"].Name • ViewBag.DataValue["First.Name"] • ViewBag.DataValue["First"]["Name"]
另请记住,将使用找到的第一个值,终止搜索。