c# - MVC - 通用操作

标签 c# asp.net-mvc generics

我正在构建的应用程序中有一个页面。该页面包含一些点点滴滴,然后是一个局部 View ,该 View 根据从下拉列表中选择的内容加载不同的 View 。下拉列表中的每个选项都有与之关联的不同 View ,并且每个 View 都有自己的字段和模型。

无论加载的是什么 View ,我都在执行相同的操作 - 我正在序列化模型并将 XML 存储在数据库中。情况总是如此,并且没有基于 View /模型的独特处理(除了字段不同这一事实)。出于序列化目的,所有模型都继承自相同的基类。

我希望能够做这样的事情:

public ActionResult SubmitPartialView<T>(T model)
{
   BaseClass baseClassModel = (BaseClass)(object)model;
   // serialize and save to database
}

但是 MVC 不允许这样做——“不能在 Controller 上调用操作,因为操作是一个通用方法”。

如果我尝试将 BaseClass 作为参数本身传递,它只包含基类的属性,因此不包含模型的任何属性。

除了为每个可以提交的 View 创建一个单独的操作,并让每个 View 调用一个单独的方法来处理逻辑之外,是否没有其他选择?

最佳答案

我看到这个问题有点老了,但如果它对任何人有帮助 - 我正在阅读动态模型和 MVC,看到这个,它让我想到了一个可能的解决方案。不确定为什么要拥有动态模型。但是 MVC 的伟大之处在于,您可以!

所以;

    [HttpPost]
    public ActionResult SubmitPartial([DynamicModelBinder] dynamic model)
    {
        // Our model.ToString() serialises it from the baseModel class
       var serialisedString = model.ToString();
        // do something .. echo it back for demo
       return Content(serialisedString);
    }

模型 Binder 是这样的;

public class DynamicModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var currentModel = controllerContext.HttpContext.Request.Form["CurrentModel"];
        if (currentModel == "CompanyModel")
        {
            Type customModel = typeof(CompanyModel);
            bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, customModel);
        }

        if (currentModel == "UserModel")
        {
            Type customModel = typeof(UserModel);
            bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, customModel);
        }

        return base.BindModel(controllerContext, bindingContext);
    }
}

第一个

关于c# - MVC - 通用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456585/

相关文章:

INNER JOIN 和 DISTINCT 的 SQL 实体语法

c# - 使用通用接口(interface)进行动态转换

c# - EF6中找不到用于插入记录的AddObject方法

asp.net-mvc - MVC2中区域的使用

c# - Webbrowser 每个控制不同的代理

javascript - ASP.NET MVC 中的 DataTable 应返回哪种类型的数据?

Java 泛型到变量

c# - 通用类型不相等

c# - 多次出现 Visual Studio 菜单项

c# - AWS SNS C# 无法发布大于 65kb 的消息