ASP.NET MVC: Попытка передать переменную другому действию / методу - PullRequest
0 голосов
/ 04 апреля 2019

Я из классического ASP фона. Я просто пытаюсь объявить переменную int TOTAL_ROWS вверху, и после того, как я знаю, сколько строк в моей базе данных MySQL внизу, я назначу ее переменной и передам значение другому действию / методу, который будет использоваться. , Но я продолжаю получать это An object reference is required for the non-static field Я новичок в ООП. Пожалуйста, помогите.

КОД

namespace BRO.Controllers
{
    public class PasswordController : Controller
    {
        int TOTAL_ROWS;

        //private const int TOTAL_ROWS = 2;
        private static readonly List<DataItem> _data = CreateData();

    private static List<DataItem> CreateData()
    {

        List<DataItem> list = new List<DataItem>();

        string mainconn = ConfigurationManager.ConnectionStrings["MySQLConnection"].ConnectionString;
        MySqlConnection mysqlconn = new MySqlConnection(mainconn);
        string sSQL = " SELECT * FROM mainpass ";
        MySqlCommand comm = new MySqlCommand(sSQL);
        comm.Connection = mysqlconn;

        MySqlDataAdapter adapter = new MySqlDataAdapter(comm);
        DataTable dt = new DataTable();
        adapter.Fill(dt);

        //===Try 1 Not working === An object reference is required for the non-static field,
        //============ method, or property ControllerBase.TempData
        TempData["TOTAL_ROWS"] = dt.Rows.Count;

        int iTOTAL_ROWS = dt.Rows.Count;
        //===Try 2 Not Working=== An object reference is required for the non-static field,
        //============ method, or property PasswordController.TOTAL_ROWS
        TOTAL_ROWS = iTOTAL_ROWS; //=== 

    public ActionResult AjaxGetJsonData(int draw, int start, int length)
    {
        string search = Request.QueryString["search[value]"];
        int sortColumn = -1;
        string sortDirection = "asc";
        if (length == -1)
        {
            length = TOTAL_ROWS; //*** Pass the value here
        }

        // note: we only sort one column at a time
        if (Request.QueryString["order[0][column]"] != null)
        {
            sortColumn = int.Parse(Request.QueryString["order[0][column]"]);
        }
        if (Request.QueryString["order[0][dir]"] != null)
        {
            sortDirection = Request.QueryString["order[0][dir]"];
        }

        DataTableData dataTableData = new DataTableData();
        dataTableData.draw = draw;
        dataTableData.recordsTotal = TOTAL_ROWS; //**** Pass the value here
        int recordsFiltered = 0;
        dataTableData.data = FilterData(ref recordsFiltered, start, length, search, sortColumn, sortDirection);
        dataTableData.recordsFiltered = recordsFiltered;

        return Json(dataTableData, JsonRequestBehavior.AllowGet);
    }

1 Ответ

1 голос
/ 04 апреля 2019

Вы должны сделать TOTAL_ROWS статической переменной.Только тогда вы сможете установить его статическим методом.

Но это создаст другую проблему, если ваша система будет одновременно использоваться несколькими пользователями.Данные пользователей могут перекрываться - проблема параллелизма.

Если вы просто хотите передать данные от одного действия к другому, обратите внимание на использование объекта TempData в Asp.net MVC здесь .

...