关于将模型数据分配给asp.net MVC中的文本框

汤玛士

我是MVC的新手。我有一个代码,它正要从控制器填充viewdata并将其传递给视图。只是看看代码。

控制器

public ActionResult Edit(int id)
        {
            ViewData["Name"] = "My name is XYZ";
            return View();
        }

查看页面

@Html.TextBox("Name")

我的问题是文本框如何理解以提取名称并将其显示为文本框值。基本上,名称存储在viewdata中。首先,我们需要从viewdata中提取数据,然后可以将该数据作为值分配给文本框。怎么运行的 ?。

有人解释,但对我来说不是很清楚

MVC的默认协议旨在查找关键字并尝试与这些关键字建立关联。您已选择对临时数据对象使用“名称”。然后,MVC将努力寻找具有相同名称的任何元素。它认为您打算为元素分配与ViewData对象相同的名称,因为您希望将其关联。

ViewBag也是如此。您可以给ViewBag指定一个名称(ViewBag.Name),并且每当您对某个元素使用“名称”时,MVC都会自动假定您希望该元素与ViewBag数据相关联。这也适用于列表!

ViewBag.myList = db.Products.ToList();

@Html.DropDownList("myList");

我对mvc流的了解不是很清楚。我是mvc的新手。所以我正在阅读MVC教程。阅读上面的答案后,我不太方便。只需考虑一下asp.net Web表单。以asp.net Web形式

如果我们以这种方式将任何内容存储到viewstate或session中,viewstate["Name"]="Mou" or session["Name"]="Mou"那么我们需要以这种方式在客户端渲染该值,<asp:textbox value=<% name %>/>那么我会报错,但是如果我们以这种方式编写,<asp:textbox value=<% viewstate["Name"] as string %>/>那么它将起作用。因此,如果我们简单地指定,MVC将如何理解@Html.TextBox("Name")

假设名称可以存储在会话,视图数据,视图包,临时数据等中,那么MVC引擎如何解析它?寻找更多示例的良好解释。谢谢

达林·迪米特罗夫(Darin Dimitrov)

我的问题是文本框如何理解以提取名称并将其显示为文本框值。

都是魔力。您已将Name密钥放入ViewData

ViewData["Name"] = "My name is XYZ";

因此,当您使用@Html.TextBox("Name")帮助程序时,将在ViewData中搜索Name键并自动绑定数据。

这似乎让您感到困惑,这很正常。不要使用任何ViewBag / ViewData。改用视图模型。这样,您将不再依赖任何魔术字符串。您将使用强类型的帮助器。例如,假设您要绑定一些简单的TextBox。继续为它编写一个视图模型:

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.TextBoxFor(x => x.Name)

您会看到,MVC表示模型/视图/控制器。这并不意味着ViewData / View / Controller或ViewBag / View / Controller。如此多的人将这些缩写弄混了,并且完全破坏了该模式的目的。他们从不同的来源向视图提供数据,而不仅仅是从应该向其提供信息的视图模型中获取数据。不要像那些人。

而且,由于您谈论的是列表,因此再次编写以下内容是完全错误的:

@Html.DropDownList("myList")

之所以完全错误,是因为要具有下拉菜单,您需要在模型上具有2个属性:一个简单的标量属性(用于将所选值绑定到该属性)和一个collection属性(用于将下拉列表中的可用值绑定)。

就像这样:

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}

通常会在您的控制器中填充:

public ActionResult Edit(int id)
{  
    var model = new MyViewModel();

    // this usually comes from a database
    model.Values = new[]
    {
        new SelectListItem { Value = "1", Text = "item 1" },
        new SelectListItem { Value = "2", Text = "item 2" },
        new SelectListItem { Value = "3", Text = "item 3" },
    };

    // This allows to preselect the second value in the dropdown
    model.SelectedValue = "2";

    return View(model);
}

并在视图中:

@model MyViewModel
...
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)

因此,我的建议是您越早忘记ViewData / ViewBag越好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC文本框中的TDD

来自分类Dev

Asp.net MVC中的“自动完成”文本框

来自分类Dev

使用Ajax将文本框中的数据提交到ASP Net MVC控制器

来自分类Dev

将ASP.NET MVC模型分配给AngularJS范围

来自分类Dev

在asp.net mvc中更新文本框值的脚本不起作用

来自分类Dev

文本框值未在ASP.NET MVC中更新

来自分类Dev

在ASP.NET MVC视图的代码隐藏中未引用文本框

来自分类Dev

ASP.NET MVC5在文本框中显示字符串

来自分类Dev

在 asp .net mvc 中添加值时锁定文本框

来自分类Dev

Asp.net MVC多行表单控件/文本框

来自分类Dev

在.net中,将数据存储在文本框中

来自分类Dev

文本框数据到asp.net中的xml

来自分类Dev

在JavaScript中引用ASP.net文本框数据

来自分类Dev

在asp.net文本框或其他文本框中显示txt文件的内容

来自分类Dev

将动态生成的文本框值传递给ASP.NET MVC中的控制器

来自分类Dev

如何继承ASP.NET MVC4中文本框和按钮的CSHTML文件中的Class属性?

来自分类Dev

如何在ASP.NET MVC3剃须刀中的文本框中设置默认名称

来自分类Dev

如何在asp.net MVC中获取登录的用户ID并在隐藏的文本框中显示它

来自分类Dev

在GridView Asp.net中添加搜索文本框

来自分类Dev

文本框值在asp.net中未更新

来自分类Dev

异步输出到asp.net中的文本框

来自分类Dev

如何在ASP.NET MVC3剃须刀的文本框中设置默认名称

来自分类Dev

使用ASP.NET Core 3.1 MVC根据下拉列表中的选定值填充文本框

来自分类Dev

如何使用ASP.NET MVC掩盖文本框中的最后几个字符

来自分类Dev

Javascript ajax将文本框文本发布到ActionResult asp.net mvc

来自分类Dev

将数据分配给模型并调用模型中的变量

来自分类Dev

使用ajax从文本框发送数据到asp.net MVC 5控制器

来自分类Dev

使用ajax从文本框发送数据到asp.net MVC 5控制器

来自分类Dev

将值分配给加载页面中的文本框时无法更新数据

Related 相关文章

  1. 1

    ASP.NET MVC文本框中的TDD

  2. 2

    Asp.net MVC中的“自动完成”文本框

  3. 3

    使用Ajax将文本框中的数据提交到ASP Net MVC控制器

  4. 4

    将ASP.NET MVC模型分配给AngularJS范围

  5. 5

    在asp.net mvc中更新文本框值的脚本不起作用

  6. 6

    文本框值未在ASP.NET MVC中更新

  7. 7

    在ASP.NET MVC视图的代码隐藏中未引用文本框

  8. 8

    ASP.NET MVC5在文本框中显示字符串

  9. 9

    在 asp .net mvc 中添加值时锁定文本框

  10. 10

    Asp.net MVC多行表单控件/文本框

  11. 11

    在.net中,将数据存储在文本框中

  12. 12

    文本框数据到asp.net中的xml

  13. 13

    在JavaScript中引用ASP.net文本框数据

  14. 14

    在asp.net文本框或其他文本框中显示txt文件的内容

  15. 15

    将动态生成的文本框值传递给ASP.NET MVC中的控制器

  16. 16

    如何继承ASP.NET MVC4中文本框和按钮的CSHTML文件中的Class属性?

  17. 17

    如何在ASP.NET MVC3剃须刀中的文本框中设置默认名称

  18. 18

    如何在asp.net MVC中获取登录的用户ID并在隐藏的文本框中显示它

  19. 19

    在GridView Asp.net中添加搜索文本框

  20. 20

    文本框值在asp.net中未更新

  21. 21

    异步输出到asp.net中的文本框

  22. 22

    如何在ASP.NET MVC3剃须刀的文本框中设置默认名称

  23. 23

    使用ASP.NET Core 3.1 MVC根据下拉列表中的选定值填充文本框

  24. 24

    如何使用ASP.NET MVC掩盖文本框中的最后几个字符

  25. 25

    Javascript ajax将文本框文本发布到ActionResult asp.net mvc

  26. 26

    将数据分配给模型并调用模型中的变量

  27. 27

    使用ajax从文本框发送数据到asp.net MVC 5控制器

  28. 28

    使用ajax从文本框发送数据到asp.net MVC 5控制器

  29. 29

    将值分配给加载页面中的文本框时无法更新数据

热门标签

归档