Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 关于在asp.net MVC中将模型数据指定给文本框_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 关于在asp.net MVC中将模型数据指定给文本框

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值

我是MVC的新手。我得到了一个代码,它正要从控制器中填充viewdata并将其传递给view。只要看看代码

控制器

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”。我更新了我的答案以反映这一点。