Как использовать только один контроллер MVC для всего приложения?

#model-view-controller

#Модель-представление-контроллер

Вопрос:

 Is it possible Single Controller for Entire MVC Application to Route Views Or can we Rename Controller Name at Run-time to Route Views?.. 
  

я попробовал приведенный ниже код для просмотра маршрутов, который работает нормально.
Контроллер:-

 public class HomeController : Controller
{
 public ActionResult Commmon_Method(string VN, string Id)
 {
   return View(@"~/"   VN   ".cshtml");
 }
}
  

просмотр страницы:

 $('#btn_Test').click(function () {
        window.location.href = '@Url.Action("Commmon_Method", "Home")?Id='   1   'amp;VN='   'Views/Test/Index2';
    });
  

Выходной URL:-

 http://localhost:52296/Home/Commmon_Method?Id=1amp;VN=Views/Test2/Index
  

——————————*———————

несмотря на то, что я пробовал себя как динамический маршрут на основе MVC, но не смог добиться успеха:

 http://localhost:52296/Home/Test2/Index
  

таким образом, имя контроллера должно быть единственным, чтобы предоставить весь запрос, а также я попробовал контроллер времени выполнения, а пользовательский контроллер не удался

еще одна вещь, в которой мне удается использовать один динамический метод данных JSON в MVC, поэтому нет необходимости писать пакет кода для получения данных JSON с использованием метода Jquery Ajax.

единственная вещь в MVC, успешная маршрутизация на основе одного контроллера, означает, что MVC станет очень простым приложением для разработки, поэтому не могли бы вы поделиться своими знаниями, чтобы упростить сложный путь разработки

Ответ №1:

HTML :-

 window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Test';
  

Метод контроллера для создания контроллера:

 public ActionResult common_dll(string ctrl)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("using System;"   Environment.NewLine);
            sb.Append("using System.Collections.Generic;"   Environment.NewLine);
            sb.Append("using System.Data;"   Environment.NewLine);
            sb.Append("using System.Data.SqlClient;"   Environment.NewLine);
            sb.Append("using System.Dynamic;"   Environment.NewLine);
            sb.Append("using System.Linq;"   Environment.NewLine);
            sb.Append("using System.Text;"   Environment.NewLine);
            sb.Append("using System.Web.Mvc;"   Environment.NewLine);

            sb.Append("namespace Testing_MVC.Controllers"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);

            sb.Append("public class "   ctrl   "Controller"   " : Controller"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);

            sb.Append("public ActionResult Index()"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);
            sb.Append("return View();"   Environment.NewLine);
            sb.Append("}"   Environment.NewLine);

            sb.Append("}"   Environment.NewLine);

            sb.Append("}"   Environment.NewLine);

            var dir = Server.MapPath("~\Controllers");
            var file = System.IO.Path.Combine(dir, ctrl   "Controller"   ".cs");
            System.IO.Directory.CreateDirectory(dir);
            System.IO.File.WriteAllText(file, sb.ToString());

            return this.RedirectToAction("Index", ctrl, new { id = 1 });
        }
  

Ответ №2:

 public static string JS_NAS(DataSet dss)
    {
        string str = Newtonsoft.Json.JsonConvert.SerializeObject(dss, Newtonsoft.Json.Formatting.Indented);
        return str;
    }

    public static SqlParameter[] NAS_SQLPRM(string paramstr)
    {
        #region
        string[] parameters = paramstr.Split('~');
        string err = string.Empty;

        int len = parameters.Length;
        SqlParameter[] sqlParam = new SqlParameter[len];
        for (int i = 0; i < len; i  )
        {
            string[] paramWithValue = parameters[i].Split('$');            
        string param = paramWithValue[0].ToString();
            string value = paramWithValue[1].ToString();
            sqlParam[i] = new SqlParameter { ParameterName = param, Value = value };
        }
        return sqlParam;
        #endregion
    }

    [WebMethod]
    public static String Insertupdates(string paramstr, string procname)
    {
        string err = "", dbstr = "";
        string[] parameters = paramstr.Split('~');
        int len = parameters.Length;
        SqlParameter[] sqlParam = new SqlParameter[len];
        for (int i = 0; i < len; i  )
        {
            string[] paramWithValue = parameters[i].Split('$');
            string param = paramWithValue[0].ToString();
            string value = paramWithValue[1].ToString();
            sqlParam[i] = new SqlParameter { ParameterName = param, Value = value };
        }

        string str = new clsiCMSBLBase().insertData(ref err, ref dbstr, sqlParam, procname);
        return err.Replace("$", "")   "$"   dbstr.Replace("$", "");
    }


    [WebMethod]
    public static String GetRowData_Tables(string procedureName, string paramstr)
    {
        string[] parameters = paramstr.Split('~');
        string err = string.Empty;
        int len = parameters.Length;
        SqlParameter[] sqlParam = new SqlParameter[len];
        for (int i = 0; i < len; i  )
        {
            string[] paramWithValue = parameters[i].Split('$');
            string param = paramWithValue[0].ToString();
            string value = paramWithValue[1].ToString();
            sqlParam[i] = new SqlParameter { ParameterName = param, Value = value };
        }

        try
        {
            DataSet ds = new clsiCMSBLBase().GetListData(ref err, sqlParam, procedureName);
            String JSONString = String.Empty;
            JSONString = Newtonsoft.Json.JsonConvert.SerializeObject(ds, Newtonsoft.Json.Formatting.Indented);

            return JSONString;
        }
        catch (Exception)
        {
            return "Error";
        }
    }


    var data = getRowData_TableBased('DBSP_ListSupplierGroup', paramstr);

function create_Listgrid(data) {
        var cellsrenderer = function (row, column, value) {
            return '<div style="text-align: right; margin-top: 5px;">'   (1   row)   '</div>';
        }

        $("#jqxgrid").jqxGrid(
        {
            width: '98%',
            height: '370px',
            source: { datatype: "json", datafields: [], localdata: data },
            filterable: true,
            sortable: true,
            theme: 'energyblue',
            pageable: true,
            columnsresize: true,
            pagesizeoptions: ['5', '10', '15', '20', '100'],
            pagesize: 15,
            pagermode: 'default',
            enabletooltips: true,

            columns: get_cols(data)
            /*
            columns: [
                        { text: 'S.No', dataField: 'Slno', align: 'left', width: '40px', cellsrenderer: cellsrenderer },
                        { text: 'MapID', dataField: 'MapID', align: 'left', hidden: true },
                        { text: 'PriSupplierID', dataField: 'PriSupplierID', align: 'left', hidden: true },

                        { text: "Primary Supp Code", datafield: "PriSuppCode", cellsalign: 'left', align: 'left', width: '140px' },
                        { text: "Primary Supplier Name", datafield: "PriSupName", cellsalign: 'left', align: 'left', width: '420px' },
                        { text: "Primary Supplier Type", datafield: "PriSupType", cellsalign: 'left', align: 'left', width: '125px', hidden: true },

                        { text: 'SecSupplierID', dataField: 'SecSupplierID', align: 'left', hidden: true },
                        { text: "Secondary Supplier Code", datafield: "SecSuppCode", cellsalign: 'left', align: 'left', width: '190px' },
                        { text: "Secondary Supplier Name", datafield: "SecSupName", cellsalign: 'left', align: 'left', width: '420px' },
                        { text: "SecSupType", datafield: "SecSupType", cellsalign: 'left', align: 'left', hidden: true }
            ]
            */
        });
    }

    function get_cols(data) {
        var datacols = new Array();
        if (!isEmpty(data) amp;amp; data.Table1.length > 0) {
            $.each(data.Table1, function (name, v) {
                if (v.ColumnWidth == 0)
                    datacols.push({ text: v.ColumnHeader, datafield: v.DataField, hidden: true });
                else
                    datacols.push({ text: v.ColumnHeader, datafield: v.DataField, cellsalign: 'left', align: 'left', width: v.ColumnWidth });
            });

            $("#<%=btnExport.ClientID%>").show();
        }
        return datacols;
    }

function getRowData_TableBased(procName, paramstr) {
        var rowData;
        $.ajax({
            url: 'Supplier_Group.aspx/GetRowData_Tables',
            type: "POST",
            dataType: "json",
            async: false,
            data: "{procedureName: '"   procName   "',paramstr: '"   paramstr   "'}",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                var response = data.d;
                if (response != "Error") {
                    rowData = $.parseJSON(response);
                }
                else {
                    alert("Retrive Error !!");
                }
            },
            error: function (error) { }
        });
        return rowData;
    }


    /*
    var paramstr = '';
    paramstr = "@UserID$"   uid   '~';
    paramstr  = "@PageName$"   pgnm   '~';
    */
    paramstr  = "@MethodName$"   pgnm   '~';
            paramstr  = "@ErrorMsg$"   msg;



function fncCompareDates1(startDate, endDate) {
            startDate = startDate.split('/');
            endDate = endDate.split('/');

            var new_start_date = new Date(startDate[2], startDate[1], startDate[0]);
            var new_end_date = new Date(endDate[2], endDate[1], endDate[0]);


            var date1 = startDate.split('/')[2]   "-"   startDate.split('/')[1]   "-"   startDate.split('/')[0];
            var new_start_date = new Date(date1);

            var date2 = endDate.split('/')[2]   "-"   endDate.split('/')[1]   "-"   endDate.split('/')[0];
            var new_end_date = new Date(date2);

            if (date_format(startDate) > date_format(endDate))
                return false;

            return true;
        }


public static DataSet BIZ_LIST_DATA(ref string errString, SqlParameter[] parameters, string spname)
    {
        try
        {
            DataSet ds = new DataSet();
            ds = DB_LIST_DATA(parameters, spname);
            return ds;
        }
        catch (Exception ex)
        {
            errString = ex.Message;

        }
        return null;
    }

    public static DataSet DB_LIST_DATA(SqlParameter[] Params, string spName)
    {
        SqlConnection sqlCon = new SqlConnection(main.connectionStringICane());
        try
        {
            DataSet ds = new DataSet();
            if (sqlCon.State == ConnectionState.Closed)
            {
                sqlCon.Open();
            }

            SqlCommand sqlCmd = new SqlCommand();
            sqlCmd.Connection = sqlCon;
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.CommandText = spName;
            foreach (SqlParameter p in Params)
            {
                if ((p.Direction == ParameterDirection.InputOutput) amp;amp; (p.Value == null))
                {
                    p.Value = DBNull.Value;
                }
                sqlCmd.Parameters.Add(p);
            }
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCmd);
            sqlDataAdapter.Fill(ds);
            return ds;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            sqlCon.Close();
            sqlCon.Dispose();
        }
    }



function get_cols(data) {
    var datacols = [];
    if (!isEmpty(data)) {
        $.each(data.Table1, function (name, value) {
            if (value.ColumnWidth == 0)
                datacols.push({ text: value.ColumnHeader, datafield: value.DataField, hidden: true });
            else
                datacols.push({ text: value.ColumnHeader, datafield: value.DataField, cellsalign: 'left', align: 'left', width: value.ColumnWidth });
        });
    }
    return datacols;
}

function isEmpty(str) {
    return typeof str == 'string' amp;amp; !str.trim() || typeof str == 'undefined' || str === null || str == 0 || str == "" || str == "[]";
}

function getRowData_TableBased(procName, paramstr, urlpath) {
    var rowData = '';
    $.ajax({
        url: urlpath,
        type: "POST",
        dataType: "json",
        async: false,
        data: "{procedureName: '"   procName   "',paramstr: '"   paramstr   "'}",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            rowData = data;
        },
        error: function (error) {
        }
    });
    return rowData;
}

function Common_grid() {
    var commonModuleOption = {
        width: '97%',
        height: '350',
        filterable: true,
        sortable: true,
        theme: 'energyblue',
        pageable: true,
        columnsresize: true,
        pagesizeoptions: ['5', '10', '15', '20', '100'],
        pagesize: 15,
        pagermode: 'default',
        enabletooltips: true,
    };

    return commonModuleOption;
}
  

Ответ №3:

 public ActionResult Commmon_Method(string VN, string Id)
        {
            return View(@"~/"   VN   ".cshtml");
        }

        public ActionResult Commmon_Method_Url()
        {
            return PartialView(@"~/"   Request.QueryString["VN"]   ".cshtml");
        }

        [HttpPost]
        public ActionResult GetRowData_Tables(string paramstr, string procedureName)
        {
            #region
            string[] parameters = paramstr.Split('~');
            string err = string.Empty;

            int len = parameters.Length;
            SqlParameter[] sqlParam = new SqlParameter[len];
            for (int i = 0; i < len; i  )
            {
                string[] paramWithValue = parameters[i].Split('$');
                string param = paramWithValue[0].ToString();
                string value = paramWithValue[1].ToString();
                sqlParam[i] = new SqlParameter { ParameterName = param, Value = value };
            }

            return Content(Newtonsoft.Json.JsonConvert.SerializeObject(GetListData(ref err, sqlParam, procedureName), Newtonsoft.Json.Formatting.Indented));
            #endregion
        }

        public DataSet GetListData(ref string errString, SqlParameter[] parameters, string spname)
        {
            #region
            try
            {
                DataSet ds = new DataSet();
                ds = ListData(parameters, spname);
                return ds;
            }
            catch (Exception ex)
            {
                errString = ex.Message;

            }
            return null;
            #endregion
        }

        public DataSet ListData(SqlParameter[] Params, string spName)
        {
            #region
            String conString = System.Configuration.ConfigurationManager.ConnectionStrings["Connection2"].ConnectionString;
            SqlConnection sqlCon = new SqlConnection(conString);

            #region
            try
            {
                DataSet ds = new DataSet();
                if (sqlCon.State == ConnectionState.Closed)
                {
                    sqlCon.Open();
                }

                SqlCommand sqlCmd = new SqlCommand();
                sqlCmd.Connection = sqlCon;
                sqlCmd.CommandType = CommandType.StoredProcedure;
                sqlCmd.CommandText = spName;
                foreach (SqlParameter p in Params)
                {
                    if ((p.Direction == ParameterDirection.InputOutput) amp;amp; (p.Value == null))
                    {
                        p.Value = DBNull.Value;
                    }
                    sqlCmd.Parameters.Add(p);
                }
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCmd);
                sqlDataAdapter.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sqlCon.Close();
                sqlCon.Dispose();
            }
            #endregion
            #endregion
        }

        //[OutputCache(Duration = 3600, VaryByParam = "none")]
        public ActionResult LoadMenus()
        {
            #region
            #region
            var cntent = "";
            DataSet dsmenus = new DataSet();
            string error = "";
            SqlParameter[] parameters = { new SqlParameter("@usid", SqlDbType.Int) { Value = 6 } };
            dsmenus = new DALModel().populateDataSet(ref error, parameters, "DBSP_Get_Menu");
            StringBuilder sb = new StringBuilder();
            #endregion

            sb.Append("<ul id='main-menu' class='sm sm-vertical sm-blue' data-smartmenus-id='15544681331245752'>");
            if (dsmenus.Tables[0].Rows[0]["MenuID"].ToString() == "0" amp;amp; dsmenus.Tables[0].Rows[0]["ParentID"].ToString() == "0")
            {
                cntent = "<ul></ul>";
            }
            else
            {
                #region
                var ds = dsmenus.Tables[0].AsEnumerable().Where(r => r.Field<Int32>("ParentID") == Convert.ToInt32("0"));
                foreach (DataRow pdr in ds)
                {
                    var MenuID = Convert.ToInt32(pdr["MenuID"].ToString());
                    var Action = pdr["Action"].ToString();
                    var Controller = pdr["Controller"].ToString();
                    var MenuDesc = pdr["MenuDesc"].ToString();

                    sb.Append("<li>");

                    if (Action == "")
                        sb.Append("<a href='#'>"   MenuDesc   "</a>");
                    else
                        //sb.Append("<a href='"   Url.Action(Action, Controller, new { MenuId = MenuID })   "'>"   ""   MenuDesc   ""   "</a>");
                        sb.Append("<a href='"   Url.Action("Commmon_Method_Url", "Home", new { VN = Action, ID = MenuID })   "'>"   ""   MenuDesc   ""   "</a>");

                    sb = getSubMenuList(MenuID, dsmenus, sb);
                    sb.Append("</li>");
                }
                #endregion
            }

            sb.Append("</ul>");
            cntent = sb.ToString();
            return Content(cntent, "text/html");
            #endregion
        }

        [OutputCache(Duration = 3600, VaryByParam = "none")]
        public StringBuilder getSubMenuList(Int32 ParentID, DataSet ds, StringBuilder sb)
        {
            #region
            try
            {
                var sm = ds.Tables[0].AsEnumerable().Where(r => r.Field<Int32>("ParentID") == ParentID);
                Int32 cnt = sm.AsDataView<DataRow>().Count;
                if (cnt > 0)
                {
                    #region
                    sb.Append("<ul>");
                    foreach (DataRow subdr in sm)
                    {
                        var MenuID = Convert.ToInt32(subdr["MenuID"].ToString());
                        var Action = subdr["Action"].ToString();
                        var Controller = subdr["Controller"].ToString();
                        string MenuDesc = subdr["MenuDesc"].ToString().Replace(" ", "-");

                        sb.Append("<li>");
                        if (Action == "")
                            sb.Append("<a href='#'>"   MenuDesc   "</a>");
                        else
                            //sb.Append("<a href='"   Url.Action(Action, Controller, new { MenuId = MenuID })   "'>"   MenuDesc   "</a>");
                            sb.Append("<a href='"   Url.Action("Commmon_Method_Url", "Home", new { VN = Action, ID = MenuID })   "'>"   MenuDesc   "</a>");

                        sb = getSubMenuList(MenuID, ds, sb);
                        sb.Append("</li>");
                    }
                    sb.Append("</ul>");
                    #endregion
                }
                else
                {
                    return sb;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return sb;
            #endregion
        }

        public ActionResult common_dll(string ctrl, string View)
        {
            #region
            StringBuilder sb = new StringBuilder();

            sb.Append("using System;"   Environment.NewLine);
            sb.Append("using System.Collections.Generic;"   Environment.NewLine);
            sb.Append("using System.Data;"   Environment.NewLine);
            sb.Append("using System.Data.SqlClient;"   Environment.NewLine);
            sb.Append("using System.Dynamic;"   Environment.NewLine);
            sb.Append("using System.Linq;"   Environment.NewLine);
            sb.Append("using System.Text;"   Environment.NewLine);

            sb.Append("using System.Reflection;"   Environment.NewLine);
            sb.Append("using System.Reflection.Emit;"   Environment.NewLine);

            sb.Append("using System.Web.Mvc;"   Environment.NewLine);

            sb.Append("namespace Testing_MVC.Controllers"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);

            sb.Append("public class "   ctrl   "Controller"   " : Controller"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);

            sb.Append("public ActionResult "   View   "()"   Environment.NewLine);
            sb.Append("{"   Environment.NewLine);
            sb.Append("return View();"   Environment.NewLine);
            sb.Append("}"   Environment.NewLine);

            sb.Append("}"   Environment.NewLine);

            sb.Append("}"   Environment.NewLine);
            #endregion

            #region
            var dir = Server.MapPath("~\Controllers");
            var file = System.IO.Path.Combine(dir, ctrl   "Controller"   ".cs");

            /*
                System.IO.FileInfo fi = new System.IO.FileInfo(file);
                System.IO.StreamWriter str = fi.CreateText();
                str.WriteLine(sb.ToString());
                str.Close();
            */

            //System.IO.Directory.CreateDirectory(dir);
            //System.IO.File.WriteAllText(file, sb.ToString());

            if (System.IO.File.Exists(file))
                System.IO.File.Delete(file);

            System.IO.File.AppendAllLines(file, sb.ToString().Split(Environment.NewLine.ToCharArray()).ToList<string>());

            /*
                System.IO.FileInfo fi = new System.IO.FileInfo(file);
                System.IO.StreamWriter str = fi.CreateText();
                str.WriteLine(sb.ToString());
                str.Close();
            */
            #endregion

            return this.RedirectToAction(View, ctrl, new { MainID = 12, ID = 1 });
        }
  

Ответ №4:

 <script>
    $('#btn_Test').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Testingamp;View=Index';
        //window.location.href = '@Url.Action("Commmon_Method", "Home")?Id='   1   'amp;VN='   'Areas/Testing/Views/Index';
    });
</script>

<script>
    //$(function () {
    //    var paramstr = '';
    //    paramstr = "@@Month$"   1;
    //    paramstr  = "~@@Year$"   2018;
    //    paramstr  = "~@@StateID$"   0;
    //    paramstr  = "~@@HubID$"   0;
    //    paramstr  = "~@@BranchID$"   0;
    //    paramstr  = "~@@EmpID$"   0;
    //    paramstr  = "~@@EmpTypeID$"   0;
    //    paramstr  = "~@@UserID$"   1;
    //    paramstr  = "~@@UserTypeID$"   1;

    //    var data = getRowData_TableBased('DBSP_MM_Rpt_AttendanceMonthWsie', paramstr, '@Url.Action("GetRowData_Tables", "Home")');
    //    Grid(data);
    //});

    function Grid(data) {
        if (!isEmpty(data)) {
            //$("#jqxgrid").jqxGrid($.extend(true, {}, Common_grid(), {
            //    source: { datatype: "json", datafields: [], localdata: data },
            //    columns: Get_Colmns(data)
            //}));
        }
    }

    function Get_Colmns(data) {
        var datacols = [];
        if (!isEmpty(data)) {
            $.each(data.Table1, function (name, value) {
                if (value.ColumnWidth == 0)
                    datacols.push({ text: value.ColumnHeader, datafield: value.DataField, hidden: true });
                else
                    datacols.push({ text: value.ColumnHeader, datafield: value.DataField, cellsalign: 'left', align: 'left', width: value.ColumnWidth });
            });
        }
        return datacols;
    }
</script>
  

Ответ №5:

 <script>
    $('#btn_Controller1').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Testingamp;View=Index';

        //window.location.href = '@Url.Action("Commmon_Method", "Home")?Id='   1   'amp;VN='   'Views/Test/Index';
        //window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Listamp;View=Index';
    });

    $('#btn_Controller2').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=MyDocsamp;View=Test';
    });

    $('#btn_Controller3').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Testamp;View=Delete';
    });

    $('#btn_Controller4').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Test1amp;View=Index';
    });

    $('#btn_Controller5').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Test2amp;View=Index';
    });

    $('#btn_Controller6').click(function () {
        window.location.href = '@Url.Action("common_dll", "Home")?ctrl=Test3amp;View=Index';
    });
</script>