C# MVC3模式表单位于不同页面中

C# MVC3模式表单位于不同页面中,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我提前道歉如果这让人困惑,我很难用语言表达这个概念 假设我有一个付款创建屏幕,带有一个下拉框或列表框来选择相关的供应商,其中必须选择一个供应商。。。但是供应商尚不存在。我不想将用户重定向到另一个页面,这样他们就可以创建必备的供应商,并让用户丢失他/她已经输入的所有信息。相反,我想在屏幕上放置一个链接,单击该链接时,会出现一个模式表单,以便他们可以动态添加供应商对象,验证它并引用它,然后继续添加付款记录 我已经为供应商创建了一个屏幕,如果我能够以某种方式重用该代码,那将是一个理想的选择,但我没有看

我提前道歉如果这让人困惑,我很难用语言表达这个概念

假设我有一个
付款
创建屏幕,带有一个下拉框或列表框来选择相关的
供应商
,其中必须选择一个
供应商
。。。但是
供应商
尚不存在。我不想将用户重定向到另一个页面,这样他们就可以创建必备的
供应商
,并让用户丢失他/她已经输入的所有信息。相反,我想在屏幕上放置一个链接,单击该链接时,会出现一个模式表单,以便他们可以动态添加
供应商
对象,验证它并引用它,然后继续添加
付款
记录

我已经为
供应商
创建了一个屏幕,如果我能够以某种方式重用该代码,那将是一个理想的选择,但我没有看到一个简单的方法来做到这一点

这里还有另一个技巧:
供应商
记录也可能引用不存在的内容;可能存在“嵌套”模态形式的可能性相当高。此外,对于任何给定的记录,可能有几个“依赖项”,我希望每个记录都表现出相同的行为,以获得一致的用户体验


MVC框架中是否有某种机制,或者是否有一种适当的模式来创建这种行为?我正在尝试一种连续的、直观的用户体验,而我正在绞尽脑汁寻找最好的方法。

您想要的概念是局部视图。它们本身几乎可以是一个完整的页面,你只需将它们插入任何你想插入的地方

您可以将它们包含在这样的页面中:

@Html.Partial("_PaymentScreen")
或者,如果需要在加载原始页面的同时呈现图像或媒体,可以使用以下方法:

@Html.RenderPartial("_PaymentScreen") 
渲染局部视图的选项非常多用

对于您的modal,您可以执行以下操作:

<div id="myModal">
    @Html.RenderPartial("_PaymentScreen")
</div>

@Html.RenderPartial(“\u PaymentScreen”)
关于如何使用它们,有很多参考资料,以下是一些:


您可以选择子窗口,而不是模式窗口。是的,我考虑过这一点,但它似乎破坏了用户体验,然后他们打开了两个窗口,这可能会让人困惑。我希望避免这种情况。我熟悉局部观点;根据我的经验,这些似乎不适合我正在尝试做的事情,原因有几个。模型无法啮合,这将迫使我嵌套
n
层模型数据,验证将成为一场噩梦。“添加新供应商”链接肯定需要是一个AJAX调用,而不是在原始DOM中。我不确定为什么嵌套几层模型数据会那么糟糕,我知道您说过
n
,但您的场景只需要2-3层。我也不知道为什么验证会是一场噩梦,你需要AJAX来完成你正在做的事情,这样验证就可以在发布到控制器操作的过程中完成。如果您想尝试不同的方法,请查看客户端实现。差不多。