首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASP.NET MVC,用户如何根据在SelectList中选择的内容发布模型?

问使用ASP.NET MVC,用户如何根据在SelectList中选择的内容发布模型?
EN

Stack Overflow用户
提问于 2021-08-23 22:15:39
回答 1查看 42关注 0票数 0

在我的应用程序中,我有一个创建对象所需的流程。

为了演示,我会说我的对象是一个“精灵宝可梦”。所以我有一个“精灵宝可梦”的界面,它的统计数据与所有这些都相关,类似于:

代码语言:javascript
复制
public interface IPokemon
{
        string Type { get; set; }
        public static List<SelectListItem> TypeList { get; }
        int HPStat { get; set; }
        int ATKStat { get; set; }
        int DEFStat { get; set; }
        int SPATKStat { get; set; }
        int SPDEFStat { get; set; }
}

然后我有了一个抽象的Pokemon类:

代码语言:javascript
复制
public abstract class Pokemon : IPokemon
{
    public static List<SelectListItem> TypeList { get; } = new List<SelectListItem>
    {   new SelectListItem { Value = "Bulbasaur", Text = "Bulbasaur" },
        new SelectListItem { Value = "Squirtle", Text = "Squirtle" },
        new SelectListItem { Value = "Charmander", Text = "Charmander" }
    };
    // also implements each of the int Stats
}

在HTML语言中,对于IPokemon接口上的字符串Type,我将select绑定到TypeList。默认情况下,从服务器传递的对象是一个Bulbasaur。

代码语言:javascript
复制
<select asp-for="Type" asp-items="IPokemon.TypeList"></select>

当我尝试POST结果时,出现错误,因为IPokemon无法初始化。

我理解为什么会发生这个错误,但我很难弄清楚将交互作为一个整体来组织的最好方法。我假设我想要返回一个不同的模型对象,这取决于用户选择的对象,但我也在想,我可能对一般情况下应该如何构造有一个错误的解释。

完成这一步后,我认为我应该根据返回的内容创建正确的模型对象,然后通过允许某些选项继续创建过程,这取决于在第一步中选择了哪个Pokemon类。举个例子:如果在这一步中选择了Squirtle,我会想要移动到一个允许选择不同的“水类型”移动的页面。

欢迎任何澄清或指向资源来了解如何实现这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-23 23:10:41

这里有几点建议:

首先,我想知道你是否真的想让你的Pokemon.TypeList成为静态的?目前,您拥有它的方式意味着每个类型为Pokemon的对象(或其任何子类)都将拥有所有Pokemon类型的列表。这看起来像是大量的数据重复。

其次,在组合框中有asp-items="IPokemon.TypeList",但TypeList对象当前位于Pokemon类中,而不是IPokemon接口中。我认为这是一个拼写错误,您实际上想指向Pokemon.TypeList。此外,你不会真的在一个接口中有一个类型列表,真的。它们最好是坐在基类中,或者甚至在其他地方放在自己的静态类中。

第三,关于结构:如果您所有的Pokemon对象都继承自您的抽象基类,那么在我看来,将您的所有抽象IPokemon方法放在您的基类中会更有意义,因为添加一个额外的接口只会增加这里的复杂性。

我记得从继承和接口方面读到过一件事,这让我印象深刻:当在学术环境中教授继承树时,它的前提是你将有一个非常分层的继承结构(例如,A类和B类继承自C类,C类和D类继承自E类),而在现实世界中,你的继承结构往往是非常扁平的(比如,A、B、C和D类都继承自E类),这样做要简单得多。

希望这些指针对你有意义!如果没有,请给我一个问题。

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

https://stackoverflow.com/questions/68899626

复制
相关文章

相似问题

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