Asp.net mvc 关于在asp.net MVC中将模型数据指定给文本框
我是MVC的新手。我得到了一个代码,它正要从控制器中填充viewdata并将其传递给view。只要看看代码 控制器Asp.net mvc 关于在asp.net MVC中将模型数据指定给文本框,asp.net-mvc,Asp.net Mvc,我是MVC的新手。我得到了一个代码,它正要从控制器中填充viewdata并将其传递给view。只要看看代码 控制器 public ActionResult Edit(int id) { ViewData["Name"] = "My name is XYZ"; return View(); } 查看页面 @Html.TextBox("Name") 我的问题是textbox如何理解提取名称并将其显示为textbox值
public ActionResult Edit(int id)
{
ViewData["Name"] = "My name is XYZ";
return View();
}
查看页面
@Html.TextBox("Name")
我的问题是textbox如何理解提取名称并将其显示为textbox值。基本上,名称存储在viewdata中。首先我们需要从viewdata中提取数据,然后我们可以将该数据作为值分配给textbox。它是如何工作的
有人解释,但事情对我来说不是很清楚
MVC使用默认协议来查找关键字并尝试与这些关键字建立关联。您已选择对临时数据对象使用“名称”。MVC将努力寻找具有相同名称的任何元素。它认为您打算将元素指定为与ViewData对象相同的名称,因为您希望将其关联
ViewBag也是如此。您可以为ViewBag指定一个名称(ViewBag.name),并且每当您对元素使用“name”时,MVC将自动假定您希望该元素与ViewBag数据关联。这也适用于列表
ViewBag.myList = db.Products.ToList();
@Html.DropDownList("myList");
我对mvc流程的理解不是很清楚,我是mvc新手。所以我正在阅读mvc教程。读了上面的答案后,我感到不太舒服。想想asp.net web表单吧。在asp.net web表单中
如果我们以这种方式将任何内容存储到viewstate或session中,那么我们需要在客户端以这种方式呈现该值
,然后我将得到错误,但如果我们以这种方式编写
,那么它将工作。那么,如果我们只指定@Html.TextBox(“名称”)
假设名称可以存储在session、viewdata、viewbag、tempdata等中,那么MVC引擎如何解析它呢?寻找更好的解释与更多的例子。
谢谢
我的问题是textbox如何理解提取名称并将其显示为textbox值
都是神奇的弦。您已将名称
键放入视图数据
:
ViewData["Name"] = "My name is XYZ";
因此,当您使用@Html.TextBox(“Name”)
时,助手将在ViewData中搜索Name键并自动绑定数据
这对你来说是很正常的。不要使用任何ViewBag/ViewData。改用视图模型。这样,您将不再依赖任何魔法字符串。您将使用强类型助手。例如,假设您想要绑定一些简单的文本框。继续为其编写视图模型:
public class MyViewModel
{
public string Name { get; set; }
}
然后让控制器操作将此模型传递给视图:
public ActionResult Edit(int id)
{
var model = new MyViewModel();
model.Name = "My name is XYZ";
return View(model);
}
@model MyViewModel
...
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
最后,将视图强类型化为模型,并使用强类型帮助器:
@model MyViewModel
...
@Html.TextBoxFor(x => x.Name)
你看,MVC意味着模型/视图/控制器。它并不意味着ViewData/View/Controller或ViewBag/View/Controller。许多人混淆了这些缩写,完全违背了模式的目的。它们从不同的来源向视图提供数据,而不仅仅是从应该提供信息的视图模型。不要像那些人那样
既然你谈到了列表,那么再次写下以下内容是完全错误的:
@Html.DropDownList("myList")
这完全错误的原因是,为了创建下拉列表,您需要模型上的两个属性:一个简单的标量属性来绑定选定的值,一个集合属性来绑定下拉列表中的可用值
就这样,
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
并且认为:
public ActionResult Edit(int id)
{
var model = new MyViewModel();
model.Name = "My name is XYZ";
return View(model);
}
@model MyViewModel
...
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
因此,我的建议是,您越早忘记ViewData/ViewBag越好。我对下拉绑定有点困惑。MyViewModel有两个属性,一个是SelectedValue,另一个是Values,所以如何编写model.Value=“2”?没有称为值的属性?您还没有演示如何使用SelectedValue属性吗?如果可能,请告诉我如何使用SelectedValue属性。谢谢,那是我的错误。它应该是
model.SelectedValue=“2”代码>。我更新了我的答案以反映这一点。