首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于EditorTemplates使用ASP.Net MVC的代码

关于EditorTemplates使用ASP.Net MVC的代码
EN

Stack Overflow用户
提问于 2015-09-02 10:55:10
回答 1查看 64关注 0票数 0

我在看EditorTemplates上的一篇文章

从这个url http://stackoverflow.com/questions/4872192/checkboxlist-in-mvc3-0

在看了他们的代码之后,我只是不明白它是如何工作的。

视图模型:

代码语言:javascript
复制
public class MyViewModel
{
    public int Id { get; set; }
    public bool IsChecked { get; set; }
}

控制器:

代码语言:javascript
复制
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new[] 
        {
            new MyViewModel { Id = 1, IsChecked = false },
            new MyViewModel { Id = 2, IsChecked = true },
            new MyViewModel { Id = 3, IsChecked = false },
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<MyViewModel> model)
    {
        // TODO: Handle the user selection here
        ...
    }
}

观景

代码语言:javascript
复制
(

~/Views/Home/Index.cshtml

):

@model IEnumerable<AppName.Models.MyViewModel>
@{
    ViewBag.Title = "Home Page";
}
@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <input type="submit" value="OK" />
}

和相应的编辑器模板

代码语言:javascript
复制
(

~/Views/Home/EditorTemplates/MyViewModel.cshtml

):

@model AppName.Models.MyViewModel
@Html.HiddenFor(x => x.Id)           
@Html.CheckBoxFor(x => x.IsChecked)

请看这段代码

代码语言:javascript
复制
@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <input type="submit" value="OK" />
}

1)这一行将做什么

代码语言:javascript
复制
@Html.EditorForModel() ?

2)如果这一行将加载一个名为

来自这个位置的MyViewModel

代码语言:javascript
复制
/Views/Home/EditorTemplates/MyViewModel.cshtml

3)那么mvc引擎将如何理解它必须加载名为

MyViewModel从这个位置/Views/Home/EditorTemplates/

4)我看到人们总是创造

代码语言:javascript
复制
EditorTemplates

共享视图中的文件夹,但在这种情况下,它是在主folder.....why中创建的?

5)如果这个位置有这么多其他视图,那么这一行是如何

代码语言:javascript
复制
@Html.EditorForModel()

将加载此特定视图。

代码语言:javascript
复制
MyViewModel.cshtml

从这个地方

代码语言:javascript
复制
/Views/Home/EditorTemplates.

我是mvc和学习方面的新手。所以请帮助我理解上面的代码是如何工作的?

也请回答我的五个问题。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 11:05:45

在回答您的具体问题之前,您必须知道asp .net mvc对约定的影响很大,而不是配置。

1)这一行将做什么 @Html.EditorForModel()?

它只是告诉视图将模型作为一个整体传递给EditorFor。

2)如果这一行将加载一个名为 来自这个位置的MyViewModel /Views/Home/EditorTemplates/MyViewModel.cshtml 3)那么mvc引擎将如何理解它必须加载名为 MyViewModel从这个位置/视图/主页/编辑模板/

Mvc按照惯例知道这一点。它将查看与viewModel类型相同名称的模板视图(在本例中为MyViewModel )。

mvc所看到的模式是:

Views{Controller}\EditorTemplates\MyViewModel.cshtml Views\Shared\EditorTemplates\MyViewModel.cshtml

如果它找到了,它就会停止寻找。因此,即使共享中有视图,Controller中的视图也将被使用。

4)我看到人们总是创造 EditorTemplates文件夹在共享视图中,但在这种情况下,它是在主folder.....why中创建的?

如果是共享的,这意味着任何具有相同ViweModel类型名称的MyViewModel的其他控制器都可以使用相同的视图。如果它是在家里,这意味着它是唯一可用的“家庭”控制器特定。

5)如果这个位置有这么多其他视图,那么这一行是如何 @Html.EditorForModel()将加载此特定视图 来自这个位置的MyViewModel.cshtml /视图/主页/编辑模板。我是mvc和学习方面的新手。所以请帮助我理解上面的代码是如何工作的?

这就是惯例,正如我上面回答的,有某种模式,mvc看视图,第一个匹配被应用。

编辑

谢谢Stephen指出,我打字太快了。视图的搜索模式是:

Views{Controller}\EditorTemplates\MyViewModel.cshtml Views\Shared\EditorTemplates\MyViewModel.cshtml

所以如果它找到了,它就会停止寻找。这意味着,如果在当前控制器中找到它(在您的示例中是Home),那么它将停止查找。只有在无法在控制器特定文件夹中找到它时,它才会继续查找。

编辑2-包括一些使用编辑器模板的原因

编写编辑器/显示模板的原因是为了代码重用。

考虑在datetime属性上使用。

如果不使用Editor模板,则将复制视图中的代码,以使用。

如果您使用编辑器模板,那么如果有一天您想将更改为其他插件,则只更改编辑器模板,而不更改其他地方。因此,不要后悔自己(干)校长。当显示相同类型的输入时,这也在多个页面之间保持相同的ui一致性。

上面我给出的例子是在一个属性上,但是如果一个模板是整个模型的模板,这就是EditorForModel出现的地方,但是想法是一样的。

考虑一下本文中模板的一些用法。

https://www.simple-talk.com/dotnet/asp.net/extending-editor-templates-for-asp.net-mvc/

下面是关于为asp .net mvc 2编写的模板的更深入的细节。

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32351245

复制
相关文章

相似问题

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