基类操作中的属性路由继承了Controller MVC C#

时间:2019-03-19 19:19:27

标签: c# inheritance model-view-controller attributerouting abstract-base-class

我使用以下结构,其中我使用以下基类结构来实现视图。

public class Entity1Controller : ClassHelper<Entity1, Enitty1ViewModel>
{
    public Entity1Controller(IObject obj1<Entity1>, IObject1 obj2)
    {
    } 
}

public abstract class ClassHelper<TEntity>, TEntityViewModel> : ClassUtility<TEntity, TEntityViewModel>
{
    public readonly IObject obj1<TEntity>;
    public readonly IObject1 obj2
    public ClassHelper(IObject obj1<TEntity>, IObject1 obj2)
    {
         this.obj1 = obj1;
         this.obj2 = obj2;
    } 
}

public class ClassUtility<TEntity, TEntityViewModel> : Controller
{
    public readonly IObject obj1<TEntity>;
    public readonly IObject1 obj2
    public ClassHelper(IObject obj1<Entity1>, IObject1 obj2)
    {
         this.obj1 = obj1;
         this.obj2 = obj2;
    }

    public ActionResult Index()
    {
        return View();
    }


    [Route("Add")]
    [Route("Edit/{id:int:min(1)}")]
    public ActionResult AddorEditEntity(int id = 0)
    {
        if (id > 0)
        {
            //some code and get the entity
            return PartialView("_AddorEditPartial", entity);
        }

        return PartialView("_AddorEditPartial", new TEntityViewModel());
    }

    //Other Methods
}

www.localhost.com/Entity1上的网页给出了索引视图的结果(应该如此),但是当我尝试使用属性路由搜索url时。 www.localhost.com/Entity1/Addwww.localhost.com/Entity1/Edit/1www.localhost.com/Entity1/GetAll以及其他方法也是如此,它们不会忽略任何结果。

如果我在我的地址中使用约定路由[而不是www.localhost.com/Entity1/Add,而是使用www.localhost.com/Entity1/AddorEditEntity],则此应用程序将呈现视图并显示Web结果。

如果我直接从Controller定义相同的方法,即使用,直接将Controller继承到Entity1Controller [例如。 public class Entity1Controller : Controller(而不是上面显示的基本继承模型)是属性路由有效的文件。

我尝试用Google搜索它,并知道能DefaultDirectRouteProvider,但这仅适用于ApiController。我想在MVC应用程序中使用相同的[ Controller]。 这样,当我通过跟随地址www.localhost.com/Entity1/Add访问AddorEditEntity方法时,它应该呈现视图。

请告知是否可行。

0 个答案:

没有答案