如何基于用户输入asp.net mvc 5动态地将模型绑定到视图

时间:2015-09-23 18:00:59

标签: c# jquery asp.net-mvc asp.net-mvc-4

我是mvc的新手我需要帮助将不同的模型绑定到最初发送到视图的视图中。

让我进一步解释

我有这样的模型

using System;
using System.Collections.Generic;
using System.Linq;

using System.Text;
using System.Threading.Tasks;
using UI.Data.Models.Claim.Shared.CustomerInfo;

namespace UI.Data.Models.Claim
{
    public abstract class CreateClaimViewmodel 
{
    public DateTime CreatedDate { get; set; }
    public UserFirstName UFname { get; set; }        

    public Customer Customer { get; set; }
   public CustomerAddress CustProvidedAddress { get; set; } 


    public List<Transactions.Transaction> Transactions { get; set; }
    public DiscrepancyType discreType {get; set;}
     public List<IDiscrepancy> discrepancy  { get; set; } // assumption

 }

}

我已将Idiscrepancy注意为接口,因为根据用户在此视图上选择的内容,这可能是一个不同的子类。因此,当用户从下拉列表值之一中选择差异类型时,弹出局部视图,该视图具有针对该差异类型的相应问题。所有这些差异类型都指向我的应用程序中的不同模型/部分视图

 public enum DiscrepancyType
    {
        WithdrawalError,
        DepositError,
        CancelDetails,
        CanceledServiceSubscTransac,
        DuplicateTransaction,
        ChargedInsteadOfCredit,
        CreditNotReceived,
        DefectiveMerchantdise,
        DifferentAuthorizedAmount,
        GoodsServicesNotReceived,
        MerchandiseReturned,
        NotAsDescribed,
        PaidByAnotherMethod,
        TransacNotRecognized,
        UnauthorizedTransaction, // many more 

    }

这是我的问题

该部件可以正常工作,我想根据下拉列表显示部分视图。但是我现在理解当我将它发布回控制器时,基于用户从下拉列表中选择而添加到View(属性为Idiscrepancy属性)的新对象类型没有绑定到Model,因为Model不存在了。如何告诉我的控制器使用这个新模型而不是旧模型?

我尝试使用Jquery,但是对于每个局部视图,我需要编写不同的jquery代码并创建json对象。有没有一种有效的方法,我可以告诉我的控制器我发布了一个具有相同模型的视图,但添加了一个类型的对象。有24个类使用/实现idiscrepancy。

我认为使用@model Dynamic的另一个选项,但我不确定这是否有助于我的方案

我知道这在很多公司很常见,我想知道为什么没有太多关于根据用户输入动态更改模型的文档。

如果我的条款不正确,请道歉,因为我仍然想要摆脱网络形式的思考。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但如果您想实现每个差异类型必须加载其列表的功能,那么实现的一种方法是使用knockoutjs。它具有这种双向绑定,可在您更改下拉列表时自动更改模型数据。它会加载List的值。您必须在脚本端创建类似于CreateClaim的ViewModel。

我在我的应用程序中做了类似的功能,其中区域中的更改会加载区域相关信息。我只有一个型号。 希望它有所帮助。