- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在使用ASP.NET MVC开发应用程序,现在我需要创建一个界面(网页),该界面将允许用户从一组不同的对象中进行选择,这些对象是他们希望用作的对象。构建更复杂对象的基础。
我的问题应该是通用的,但是为了提供实际的示例,我们假设该应用程序将允许用户设计家具,例如衣柜,厨柜等。因此,我创建了代表基本构件的C#类家具设计,例如基本形状(将木材加在一起形成盒子等),门,门把手,抽屉等。这些类别中的每一个都有一些共同的属性(宽度,高度,长度)和一些特定的属性,但是所有这些都源自一个称为FurnitureItem的基本类,因此有一些方法可以将它们“连接”在一起并互换。例如,衣柜中可以使用不同类型的门……例如SimpleDoor,SlidingDoor等。设计家具的用户必须选择“门”对象的夹心类型才能应用于当前家具。另外,还有其他项目,例如分隔板,架子,抽屉等。当然,生成的模型当然是完整的定制模块化设计的衣柜或厨房柜子。
问题是,尽管我可以轻松实例化所需的所有对象并使用C#将它们连接在一起,形成一个完整的家具,但我需要为用户提供一种使用Web界面进行操作的方法。这意味着,他们可能会有某种工具箱或工具栏,并在Web界面中选择(也许拖放)项目到设计面板中……因此,尽管在浏览器中我无法使用C#类实现。 ..并且,如果我将所选项目发布到服务器(表单发布或使用Ajax),则需要重建用户先前已选择的对象的整个集合,以便适合新添加的项目。然后计算尺寸等,然后最终返回对象的完整修改集...
我试图考虑在用户仍在设计(添加和删除项目)时进行缓存或保留这些对象的不同方式,因为可能会多次往返服务器,因为尺寸的正确计算(宽度,高度,等包含的对象)是在服务器上通过C#类的方法完成的。也许最好将要设计的当前家具的对象存储在每个用户的会话对象或缓存对象中……即使那样,我仍需要能够为要添加的对象提供某种类型的ID,而要向其中添加一个ID ,以父级所有者的方式进行,因此我可以正确地在服务器中识别出新实例将连接到的对象实例。
我知道这有点令人困惑...但是我希望这能给我一个我面临的问题的想法...换句话说,我需要在服务器中保留一组互连的对象,因为它们负责计算并应用一些限制,同时允许用户通过Web界面操作这些对象以及它们的连接方式,以及添加和删除它们。因此,最后,整个事情可以保存在数据库中。从概念上讲,我什至希望为用户提供可视化的表示或反馈,以便他们在进行过程中可以看到自己的设计...
最后,问题更多是我应该采取什么方法来解决这个问题。服务器中的C#类是否足够(封装计算并可能将每个图形生成自己的图形表示返回给客户端)?我是否需要在javascript中创建类似的类以提供更流畅的用户体验?如果我设法使对象在会话中保持活动状态或在请求之间缓存对象,会更容易吗?还是应该在每次用户交互时(用于计算)再次实例化构成整个家具的所有对象?在那种情况下,我每次都必须发布所有对象和所有已经自定义的属性吗?
非常感谢您对如何最好地解决此问题的任何想法或想法。
谢谢!
最佳答案
从您描述的方式来看,这是我的设想:
听起来您确实想要光滑的用户界面,所以是的,您需要将逻辑分为两组;一个用于构建的客户端集和一个用于验证的服务器端集。我会花很多精力在javascript上,以便用户可以愉快地断开其窗口小部件的连接,然后在将所有内容发布到服务器后对其进行验证。
保存到会话将打开一整罐Webfarm蠕虫。如果可以在不到一分钟的时间内(只要他们决定了自己喜欢的东西)就可以重新创建这些小部件,那么我将避免将部分代码保存在一起。如果绝对必要,我会将它们保存到数据库中。
如果构造窗口小部件的对象数量合理,则可以一次全部减少。但是,如果有数百种“门”,您将要考虑异步调用以加载它们,并可能进行分页/排序。
我对您最后一部分关于实例化/发布构成整个家具的所有对象感到困惑。这不是必须的。我想用户将在其客户端上进行构造,然后将单个小部件对象传递给服务器进行验证。
无论如何,这就是我在想的...顺便问一下,StackOverflow,您好,这是我的第一篇文章。
关于c# - Web应用程序允许用户选择用作构建 block 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097578/
我的 blockly.js 文件中有以下代码 Blockly.Blocks['account_number'] = { // Other type. init: function() {
首先抱歉我的英语不好,我正在开发 Image Splitter 应用程序并且已经完成,但是现在的要求是当图像被分割(分成几 block /chunks)那么图像 block 的每一 block (ch
#value: 消息的返回值,当发送到一个 block 时,是该 block 中最后一句话的值。所以 [ 1 + 2. 3 + 4. ] value 计算结果为 7。我发现有时很难使用。有没有办法显式
我想构建一个包含 3 div 的响应式导航栏相同的 width和 height . 我申请了 inline-block到每个 block ,我得到一个我不理解的行为。 问题是,第三 block 由 2
我希望使用 Blockly 来允许非技术人员用户指定测试脚本。 它的一部分需要一个文件选择器,但是,我看不到 Blockly 有一个。是吗? 实际上,我找不到完整的标准 block 列表。谁有网址?
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
我想创建一个具有不同背景颜色 block 和不同悬停颜色 block 的导航栏 block 。我可以分别创建不同的悬停颜色 block 或不同的背景颜色 block ,但不能一起创建。所以请告诉我如何
我正在使用看到的代码 here定期执行代码: #define DELAY_IN_MS 1000 __block dispatch_time_t next = dispatch_time(DISPATC
为什么 block 必须被复制而不是保留?两者在引擎盖下有什么区别?在什么情况下不需要复制 block (如果有)? 最佳答案 通常,当您分配一个类的实例时,它会进入堆并一直存在,直到它被释放。但是,
我想弄清楚我这样做是否正确: 如果我有一个 block ,我会这样做: __weak MyClass *weakSelf = self; [self performBlock:^{
我想制作一个 4 block 导航菜单,虽然我已经显示了一个 block ,然后单击打开第二个 block ,从第二个开始选择并再次单击出现第三个 block ,第四个 block 相同...这是我的
例如,这样更好吗? try { synchronized (bean) { // Write something } } catch (Int
我想让一只乌龟检查前方小块的颜色并决定移动到哪里。如果前面的补丁不是白色的,那么乌龟向左或向右旋转并移动。我的 If 决策结构中出现错误,显示“此处应为 TRUE?FALSE,而不是 block 列表
我想创建一个 block 对角矩阵,其中对角 block 重复一定次数,非对角 block 都是零矩阵。例如,假设我们从一个矩阵开始: > diag.matrix [,1] [,2] [
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我创建了一个等距环境,全部使用 Javascript 和 HTML5 (2D Canvas),大部分情况下工作正常。我面临的问题是使用不同高度的图 block ,然后对图 block 上的对象索引进行
这是令我困惑的代码: public Integer getInteger(BlockingQueue queue) { boolean interrupted = false; try
我有一个基于 TPL 数据流的应用程序,它仅使用批处理 block 和操作 block 就可以正常工作。 我已经添加了一个 TransformBlock 以尝试在发布到批处理 block 之前从源中转
我是一名优秀的程序员,十分优秀!