Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Retrieving Model vs Controller检索下拉列表数据

从Retrieving Model vs Controller检索下拉列表数据
EN

Stack Overflow用户
提问于 2013-10-04 15:06:07
回答 2查看 1.7K关注 0票数 0

ASP.NET MVC 4\x{e 010} C# \x{e76f} .NET 4.5 \x{e76f} Razor

我有网页服务,返回数据的下拉列表。这些数据存储在我的模型中,然后由我的视图显示。目前,我正在控制器中进行web服务调用,并在将数据传递到视图之前将数据分配给模型。

我想知道这是否是一个很好的设置,还是我应该把我的web服务调用放在我的模型中?是否有关于web服务调用的最佳实践指南?他们应该被严格地从控制员那里叫出来,还是不重要?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-04 15:13:19

除非有显著的性能影响,理想的逻辑设置将是在模型中发生这种情况。

通常的引语是,“保持你的控制器轻,你的模型重。”(我不知道是谁先这么说的。)

控制器不应该填充模型。它应该得到模型的一个实例,并将其提供给视图。它最多应该执行一些路由逻辑(确定要发送的视图,还是使用重定向响应等)。基本上,嗯,控制模型和视图/UI之间的交互。

所以,与之不同的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ActionResult Index()
{
    var model = WidgetFactory.Create();
    model.SomeProperty = DataService.GetPropertyInfo();
    return View(model);
}

你应该这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ActionResult Index()
{
    var model = WidgetFactory.Create();
    return View(model);
}

有了这一模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public SomeType SomeProperty
{
    get
    {
        return DataService.GetPropertyInfo();
    }
}

或者可能是这样,如果在获取数据时存在开销:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private SomeType _someProperty = null;
public SomeType SomeProperty
{
    get
    {
        if (_someProperty == null)
            _someProperty = DataService.GetPropertyInfo();
        return _someProperty;
    }
}

这有一个额外的好处,即就模型而言,SomeProperty变得不可变。因为它从不修改数据并且只提供数据,所以没有理由为控制器可以使用的属性设置一个setter。

这里的想法是,模型是尽可能独立和自给自足的。或尽可能封装。它本身就代表着商业概念。如果该业务概念的一部分是存在于另一个系统上的数据,则该模型将对其进行封装。控制器没有责任从物理上知道Widget从哪里获取SomeProperty的数据。它只知道Widget公开了这些数据。Widget得到的位置取决于Widget

票数 2
EN

Stack Overflow用户

发布于 2013-10-04 16:08:44

有几种方法可以做,只要你的控制器是精简和可测试的,你可以选择任何你喜欢的方法。请注意,您还希望确保视图模型简单且愚蠢。你不想把太多的行为放在视图模型中。

您的视图模型可以这样简单。在我的视图模型中,我不喜欢有太多的行为或对服务的调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyViewModel
{
    public IEnumerable<SelectListItem> CustomerList { get; set; }
}

我将创建一个简单的扩展方法或一个帮助类,将域数据转换为DropDownList视图模型,即SelectListItem

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal static class ListHelper
{
    internal static MyViewModel ConvertToMyViewModel(this IEnumerable<Customer> customers)
    {
        //Assign customers to CustomerList;
        //MyViewModel.CustomerList
        return new MyViewModel();
    }
}

请注意,以后可能会发现自己在任何时候想要隐藏时都会重复类似的代码。您可以始终创建通用版本,因此方法是可重用的。但关键是扩展/助手方法可以帮助您进行转换。它只做转换,但没有其他。

将您的服务注入控制器。如果您使用任何一种注射框架,请接受您的粪尿素注射框架的改进。你的控制器是可测试的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class HomeController : Controller
{
    private readonly IWebService _webServiceInfo;

    public HomeController(IWebService webServiceInfo) {
        _webServiceInfo = webServiceInfo;
    }

    public ActionResult Index() {
        var customers = _webServiceInfo.GetCustomers();
        var viewModel = customers.ConvertToMyViewModel();

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

https://stackoverflow.com/questions/19192087

复制
相关文章
@RestController vs @Controller
周末的时候分享了一个技术session,讲到了@RestController 和 @Controller,当时没有太讲清楚,因为 team 里很多同事之前不是做 Java的,所以对这两个东西不太熟悉,于是写了篇文章整理了一下,顺便分享一下。这是一个比较基础的问题,可以拿来回顾一下 Spring 基础。
Guide哥
2020/05/08
2K0
@RestController vs @Controller
@RestController VS @Controller
单独使用 @Controller 而不加 @ResponseBody的话,一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 应用,对应于前后端不分离的情况。
happyJared
2019/09/24
5010
@RestController VS @Controller
[Excel技巧]创建下拉列表
在单位用Excel做统计,想偷个小懒,比如食品一栏。能不能设计一个下拉列表,直接在列表框中选择,省去键盘的重复输入呢?
卷福同学
2023/04/28
2.3K0
[Excel技巧]创建下拉列表
Java 下拉列表
import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; im
用户2965768
2019/03/04
3K0
headless CMS_model view controller
在本文中,我们将了解Headless CMS,我们将了解它的优点以及何时使用方便。此外,我们将列举实际的主要限制。为了更好地理解HCMS如何在幕后工作,我将解释如何设计和构建RawCMS,一个带有Oauth2的Aspnet.Core Headless CMS,扩展插件系统,业务逻辑支持。该解决方案可在GitHub上获得,并作为演示版在docker hub上发布。
全栈程序员站长
2022/11/16
7710
headless CMS_model view controller
Selenium处理下拉列表
在执行Selenium自动浏览器测试时,很多时候需要处理下拉菜单。下拉菜单通常用于表单中,在节省空间和防止用户在表单中选择错误的选项时非常有用。因此在测试任何网站或访问表单时,如何使用Selenium处理下拉列表显得尤为重要。
FunTester
2020/07/22
6.1K0
HTML 下拉列表框<select>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
4.8K0
自定义下拉列表
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> body{ margin: 20px; } ul,li{ margin: 0px; padding: 0px; list-style: none; } #test1{ width: 300px; height: 40px; border: solid 1px darkred; line-height: 40px
前朝楚水
2018/04/02
1.9K0
自定义下拉列表
自定义下拉列表,也就是点击一个选择框的时候,下面会弹出相对应的推荐的选项,再选择一个之后,选项的内容会填充到选择框里面。选项框随之消失。
马克社区
2022/04/14
2.1K0
flutter的列表下拉刷新
flutter的列表下拉刷新需要借助一个组件来实现,这个组件的名字是RefreshIndicator,直译过来就是刷新指示灯。
挥刀北上
2021/01/07
4.8K0
flutter的列表下拉刷新
AngularDart Material Design 下拉列表 顶
material-dropdown-select组件结合了material-select和material-button-down的API。
南郭先生
2018/09/30
5.1K0
模板代码 - 列表和下拉刷新
摘要总结:本篇文章主要介绍了如何使用ViewStub和ViewStubCompat实现多布局,以便在不同的屏幕尺寸和分辨率下达到较好的展示效果。同时,还介绍了如何使用ViewStub和ViewStubCompat实现内边距和圆角,以及自定义属性在布局中的使用。
用户1172465
2018/01/05
2.9K0
09_Entity Model VS 面向外部的Model
http://mpvideo.qpic.cn/0bf2laar6aabbqap25wiwnpvcwgdd5machya.f10002.mp4?dis_k=dcfd7428f8d00e5302446ef
宿春磊Charles
2022/03/29
1260
鼠标操作、下拉列表、键盘操作
首先了解鼠标操作这个东西是怎么实现的,用了一个类,这个类叫做actionChains
清菡
2020/12/02
4.1K0
鼠标操作、下拉列表、键盘操作
flash bootstrap下拉列表(flash 67)
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Change Theme </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> {% for theme_name, display_name in config.FLASHBLOG_THEMES.items() %} <a class="dropdown-item" href="{{ url_for('blog.change_theme', theme_name=theme_name, next=request.full_path) }}"> {{ display_name }}</a> {% endfor %} </div> </div>
用户5760343
2019/08/20
6.7K0
Python Selenium下拉列表元素定位
1.定位父元素select,然后通过tag name找到所有option,得到option元素的数组,然后通过数组索引定位,最后click.
十四君
2019/11/23
1.9K0
点击加载更多

相似问题

从Controller / Model创建视图模型。从数据库中填充列表

13

从数据库检索数据到下拉列表

20

从html表单> Model > Controller传递数据不起作用

31

将数据从mysql DB检索到下拉列表

20

使用实体框架从Controller检索列表以查看

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文