Как заполнить текстовое значение флажка на основе выбора переключателя - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в MVC и какое-то время застрял на одной его части. Кажется, я не могу найти ответ (вероятно, потому, что я не ищу то, что нужно). В любом случае, у меня есть проект MVC, который подключается к MySQL db на задней панели. Я хочу, чтобы эта страница отображалась по мере того, как пользователь выбирает дополнительные параметры. На данный момент у меня есть 2 таблицы, одна для среды, а другая для базы данных. Когда пользователь выбирает env, в фоновом режиме выполняется запрос на основе env_id для заполнения доступных баз данных. Я просмотрел несколько видео, которые привели меня туда, где я сейчас нахожусь. Я могу заставить поле Environment заполнить нормально, но не могу понять, как передать значение между div. Если я перемещу foreach вверх в первый div, я могу заставить его заполнить одно значение, но ничего при щелчке.

Если бы кто-нибудь мог указать мне на хороший учебник, который делает что-то подобное, это было бы здорово.

контроллер

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using apollo.Models;
using System.Data;

namespace apollo.Controllers
{
   public class dbController : Controller
   {      
       // GET: db    
       DBAccessLayer.db dblayer = new DBAccessLayer.db();

       public ActionResult Index()
       {
           DataSet ds = dblayer.get_environment();
           ViewBag.environment = ds.Tables[0];
           return View(ds);

       }

       public void get_database(int env_id)
       {
           DataSet ds = dblayer.get_database(env_id);
           List<database> databaselist = new List<database>();
           foreach (DataRow dr in ds.Tables[0].Rows)
           {
               databaselist.Add(new database{                      
                   db_name = dr["db_name"].ToString()
               });
           }
           Session["database"] = databaselist;            
       }


   }
}

вид

@{

}
<script src="~/Scripts/jquery-3.5.1.min.js">
</script> 

<h2>QueryTool</h2>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-4">
            <div class="jumbotron">
                <h3>Environment</h3>
                @{
                    foreach (System.Data.DataRow dr in ViewBag.environment.Rows)
                    {
                        <div class="radio">
                            <label>
                                <input type="radio" name="optionsRadios" id=" @dr["env_id"]" value=" @dr["env_id"]" checked>
                                @dr["env_name"]

                                @{
                                    ((apollo.Controllers.dbController)this.ViewContext.Controller).get_database((Convert.ToInt32(dr["env_id"])));
                                }                                


                            </label>
                        </div>
                    }
                }
            </div><!-- /.col-lg-6 -->
        </div>
        <div class="col-md-4">
            <div class="jumbotron">
                <h3>Database</h3>
                @{
                    foreach (apollo.Models.database dbname in Session["database"] as List<apollo.Models.database>)
                    {
                        @dbname.db_name
                    }
                }
            </div>
        </div>
    </div>
</div>

уровень доступа к базе данных

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using MySql.Data.MySqlClient;

namespace apollo.DBAccessLayer
{
    public class db
    {
        MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MysqlConnection"].ConnectionString);

        public DataSet get_environment()
        {
            string query = "Select * from env";
            MySqlCommand command = new MySqlCommand(query, conn);
            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }

        public DataSet get_database(int env_id)
        {
            MySqlCommand command = new MySqlCommand("Select * from permission where env_id = @env_id", conn);
            command.Parameters.AddWithValue("env_id", env_id);
            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Несколько рекомендаций:

  1. Пожалуйста, используйте инъекцию зависимостей в вашем контроллере. См. Этот документ: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection и это: https://www.c-sharpcorner.com/UploadFile/eec362/dependency-injection-in-mvc/

  2. Для уровня доступа к данным вы должны начать с шаблона проектирования репозитория.

  3. Представление должно получать модель вместо вызова метода контроллера.

  4. Избегайте использования сеанса, вместо этого следует использовать модель. эта модель будет передана из метода контроллера в представление.

  5. Ни контроллер, ни представление не должны обрабатывать никакие logi c. Это ответственность модели.

0 голосов
/ 07 мая 2020

Вы не совсем поняли концепцию MVC. Представления не должны вызывать контроллер, вместо этого контроллер передает данные представлению через модель.

Возможно, MS MVC учебник поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...