Передавать значения между методами C# MVC - PullRequest
2 голосов
/ 10 января 2020

У меня есть метод GetUser для вызова процедуры sql и возврата пары полей. Мне нужно иметь sh значения, но в тестировании это работает. Вот метод:

(правка: «The_User» - это публикуемый c экземпляр моего класса User, установленного вне метода. Это то, чем я закончил, пытаясь получить Person_ID перейти к моему методу SaveRecord. Я открыт для этого по-другому / лучше)

 public ActionResult GetUser(Models.User model)
    {
        User x = new User();
        x.User_Name = model.User_Name;
        x.Password = model.Password;
        using (var conn = new SqlConnection("connection stuff"))
        using (var com = new SqlCommand("GetUser", conn)
        { CommandType = CommandType.StoredProcedure })
        {
            com.Parameters.AddWithValue("@User_Name", x.User_Name);
            com.Parameters.AddWithValue("@Password", x.Password);
            conn.Open();
            using (var reader = com.ExecuteReader())
            {
                while (reader.Read())
                {
                    The_User.User_Name = reader["User_Name"].ToString();
                    The_User.Password =  reader["Password"].ToString();
                    The_User.Person_ID = reader["PersonID"].ToString();
                }
                if (x.User_Name == The_User.User_Name && x.Password == The_User.Password)
                {
                    User_Auth = 1;
                }
                else
                {
                    User_Auth = 0;
                }
            }
            conn.Close();
        }
    }

Позже в рабочем процессе я хочу получить значение Person_ID из метода GetUser и передать его другому методу - " Сохранить запись ". Вот оно:

 public ActionResult SaveRecord(Models.ModelData model)
    {
        ModelData md = new ModelData();
        md.thing1 = model.thing1;
        md.thing2 = model.thing2;
        md.thing3 = model.thing3;

        if (md.thing1 is null) { md.thing1 = ""; };
        if (md.thing2 is null) { md.thing2 = ""; };
        if (md.thing3 is null) { md.thing3 = ""; };


        using (var conn = new SqlConnection("connection stuff"))
        using (var com = new SqlCommand("GetAppData1", conn)
        { CommandType = CommandType.StoredProcedure })
        {
            com.Parameters.AddWithValue("@thing1", md.thing1);
            com.Parameters.AddWithValue("@thing2", md.thing2);
            com.Parameters.AddWithValue("@thing3", md.thing3);
            com.Parameters.AddWithValue("@PID", I NEED PERSON ID RIGHT HERE!!!);
            conn.Open();
            com.ExecuteNonQuery();
            conn.Close();
        }
        return View();
    }

Я перепробовал множество решений, найденных при переполнении стека, и продолжаю сталкиваться с тем, что моя переданная переменная равна нулю, когда мне это нужно, когда вызывается метод Save Record. Я ценю любую помощь! :)

1 Ответ

1 голос
/ 11 января 2020

Есть несколько способов сделать это.

Сначала попробуйте добавить @Html.HiddenFor(m=> m.Person_ID") как часть View.cs html, возвращаемого GetUser ActionResult. Предполагая, что вы возвращаетесь return View("Name Of View", The_User).

Если вы используете User.Identity, вы можете расширить его, как описано в ответе на этот пост

...