首页 > 解决方案 > 如何根据单选按钮选择填充复选框文本值

问题描述

我是 MVC 的新手,并且一直停留在其中的一部分上。我似乎找不到答案(可能是因为我没有在寻找正确的东西)。无论如何,我有一个 MVC 项目,它连接到后端的 MySQL 数据库。我希望这个页面随着用户选择更多选项而流动。我目前有两张表,一张用于环境,另一张用于数据库。当用户选择 env 时,会在后台根据 env_id 运行查询以填充可用数据库。我关注了一些视频,这些视频将我带到了现在的位置。我可以让环境框很好地填充,但无法弄清楚如何在 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;
        }

    }
}

标签: c#asp.netmodel-view-controller

解决方案


几点建议:

  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. 控制器和视图都不应该处理任何逻辑。那是模特的责任。


推荐阅读