c# - 如何根据单选按钮选择填充复选框文本值
问题描述
我是 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;
}
}
}
解决方案
几点建议:
请在您的控制器中使用依赖注入。请参阅此文档: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/
对于数据访问层,您应该从存储库设计模式开始。
视图应该接收模型而不是调用控制器方法。
避免使用会话,而应使用模型。该模型将从控制器方法传递到视图。
控制器和视图都不应该处理任何逻辑。那是模特的责任。
推荐阅读
- c# - SSRS 表达式问题。无法在表达式中使用嵌套聚合
- javascript - 如何链接返回 Promise 的 API 请求,该请求在数组中有一个字段?
- python - 从 GCS 存储桶中的文件夹中删除数百万个对象
- php - 在 localhost php 页面上执行 laravel 项目后显示错误 url not found
- php - 如何在 mysql 中保存月份名称(例如:2020 年 1 月而不是 2020-01)?
- java - 我想在java中使用具有不同时区的字符串生成日期
- python - 找出可以从字符串中的字符组成的单词的实例数
- mailgun - 如何检查发件人邮件的 TLS 版本?
- android - 如何在 Android Studio 中设置放置在图像上的适当文本颜色?
- php - 在 WooCommerce 中将购物车小计减去购物车总错误问题