使用.NET MVC和Bootstrap

朴灿烈づ我的快乐病毒、 2021-06-26 16:06 420阅读 0赞

项目结构

在这里插入图片描述

HomeController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using TodoList.Models.Login;
  7. namespace TodoList.Controllers
  8. {
  9. public class HomeController : Controller
  10. {
  11. //
  12. // GET: /Home/
  13. public ActionResult Index()
  14. {
  15. return View();
  16. }
  17. public ActionResult Login(String username, String password)
  18. {
  19. User u = new User();
  20. u.Username = username;
  21. u.Password = password;
  22. if (u.isAuth())
  23. {
  24. Session["LogedUserID"] = u.Username.ToString();
  25. return Json(1, JsonRequestBehavior.AllowGet);
  26. }
  27. else
  28. {
  29. return Json(0, JsonRequestBehavior.AllowGet);
  30. }
  31. }
  32. public ActionResult Logout()
  33. {
  34. Session.Remove("LogedUserID");
  35. return RedirectToAction("index", "home");
  36. }
  37. }
  38. }

TodoController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. namespace TodoList.Controllers
  7. {
  8. public class TodoController : Controller
  9. {
  10. public ActionResult Index()
  11. {
  12. Models.TodoModel tmodel = new Models.TodoModel();
  13. return View(tmodel.GetTodos());
  14. }
  15. public JsonResult ins(String value)
  16. {
  17. Models.TodoModel tmodel = new Models.TodoModel();
  18. return Json(tmodel.InsTodo(value), JsonRequestBehavior.AllowGet);
  19. }
  20. public JsonResult del(String value)
  21. {
  22. Models.TodoModel tmodel = new Models.TodoModel();
  23. return Json(tmodel.DelTodo(value), JsonRequestBehavior.AllowGet);
  24. }
  25. }
  26. }

Models文件夹

User.cs

  1. namespace TodoList.Models.Login
  2. {
  3. public class User
  4. {
  5. public string Username { get; set; } = "";
  6. public string Password { get; set; } = "";
  7. public bool isAuth()
  8. {
  9. if (Username.Equals("marco"))
  10. if (Password.Equals("marco"))
  11. return true;
  12. return false;
  13. }
  14. }
  15. }

Todo.cs

  1. namespace TodoList.Models
  2. {
  3. public class Todo
  4. {
  5. public int Id { get; set; }
  6. public string Value { get; set; }
  7. public string Date { get; set; }
  8. }
  9. }

TodoModel.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using System.Web;
  7. namespace TodoList.Models
  8. {
  9. public class TodoModel
  10. {
  11. public List<Todo> GetTodos()
  12. {
  13. List<Todo> p = new List<Todo>();
  14. SqlConnection sqlConnection1 =
  15. new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["TODO"].ConnectionString);
  16. SqlCommand cmd = new SqlCommand();
  17. SqlDataReader reader;
  18. cmd.CommandText = "SELECT * FROM TODO order by id desc";
  19. cmd.CommandType = CommandType.Text;
  20. cmd.Connection = sqlConnection1;
  21. sqlConnection1.Open();
  22. reader = cmd.ExecuteReader();
  23. while (reader.Read())
  24. {
  25. Todo t = new Todo();
  26. t.Id = reader.GetInt32(0);
  27. t.Value = reader.GetString(1);
  28. //t.Date = reader.GetString(2);
  29. p.Add(t);
  30. }
  31. sqlConnection1.Close();
  32. return p;
  33. }
  34. public int InsTodo(String value)
  35. {
  36. SqlConnection sqlConnection1 =
  37. new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["TODO"].ConnectionString);
  38. SqlCommand cmd = new SqlCommand();
  39. cmd.CommandText = "insert into todo (value) values (@ID); SELECT SCOPE_IDENTITY() ";
  40. cmd.Parameters.Add("@ID", SqlDbType.Text);
  41. cmd.Parameters["@ID"].Value = value;
  42. cmd.CommandType = CommandType.Text;
  43. cmd.Connection = sqlConnection1;
  44. sqlConnection1.Open();
  45. int i = 0;
  46. try
  47. {
  48. i = cmd.ExecuteNonQuery();
  49. sqlConnection1.Close();
  50. }
  51. catch
  52. {
  53. return 0;
  54. }
  55. return GetLastRow();
  56. }
  57. private int GetLastRow()
  58. {
  59. SqlConnection sqlConnection1 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["TODO"].ConnectionString);
  60. SqlCommand cmd = new SqlCommand();
  61. SqlDataReader reader;
  62. cmd.CommandText = "SELECT max(id) FROM TODO";
  63. cmd.CommandType = CommandType.Text;
  64. cmd.Connection = sqlConnection1;
  65. sqlConnection1.Open();
  66. reader = cmd.ExecuteReader();
  67. int r = 0;
  68. while (reader.Read())
  69. {
  70. r = reader.GetInt32(0);
  71. }
  72. sqlConnection1.Close();
  73. return r;
  74. }
  75. private string SafeSqlLiteral(string inputSQL)
  76. {
  77. return inputSQL.Replace("'", "''");
  78. }
  79. internal object DelTodo(String value)
  80. {
  81. SqlConnection sqlConnection1 =
  82. new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["TODO"].ConnectionString);
  83. SqlCommand cmd = new SqlCommand();
  84. cmd.CommandText = "delete todo where id = @ID";
  85. cmd.Parameters.Add("@ID", SqlDbType.Int);
  86. int xx = -1;
  87. int.TryParse(value, out xx);
  88. cmd.Parameters["@ID"].Value = xx;
  89. cmd.CommandType = CommandType.Text;
  90. cmd.Connection = sqlConnection1;
  91. sqlConnection1.Open();
  92. int i = 0;
  93. try
  94. {
  95. i = cmd.ExecuteNonQuery();
  96. sqlConnection1.Close();
  97. }
  98. catch
  99. {
  100. return 0;
  101. }
  102. return i;
  103. }
  104. }
  105. }

Index.js

  1. function button() {
  2. //$(".del").hide();
  3. del();
  4. $("#sortable li").hover(function() {
  5. $(this).find(".del").show();
  6. $(this).addClass("active");
  7. //alert($(this).attr('value'));
  8. }, function() {
  9. $(this).find(".del").hide();
  10. $(this).removeClass("active");
  11. });
  12. }
  13. function del() {
  14. $(".del").click(function(event) {
  15. // alert($(this).parent().attr('value'));
  16. var lix = $(this).parent();
  17. $.ajax({
  18. type: "POST",
  19. url: "/Todo/del",
  20. data: "value=" + $(this).parent().attr("value"),
  21. datatype: "html",
  22. success: function(data) {
  23. $(lix).hide("slow");
  24. // $(lix).remove();
  25. }
  26. });
  27. });
  28. }
  29. $(document).ready(function() {
  30. del();
  31. $(".del").hide();
  32. $("#sortable li").hover(function() {
  33. $(this).find(".del").show();
  34. $(this).addClass("active");
  35. //alert($(this).attr('value'));
  36. }, function() {
  37. $(this).find(".del").hide();
  38. $(this).removeClass("active");
  39. });
  40. $("#insertop").keydown(function(event) {
  41. if (event.which == 13) {
  42. event.preventDefault();
  43. $.ajax({
  44. type: "POST",
  45. url: "/Todo/ins",
  46. data: "value=" + $("#insertop").val(),
  47. datatype: "html",
  48. success: function(data) {
  49. if (data == 0) {
  50. alert("Erorr!!");
  51. } else {
  52. $("#sortable").prepend("<li value='" + data + "' class='list-group-item'><button class='btn btn-warning btn-xs pull-right del'><span class='glyphicon glyphicon-trash' aria-hidden='true'></span></button>" + $("#insertop").val() + "</li>");
  53. $("#insertop").val("");
  54. button();
  55. }
  56. }
  57. });
  58. }
  59. });
  60. });

Home文件夹

Index.cshtml

  1. @model IEnumerable<TodoList.Models.Todo>
  2. @{
  3. Layout = null;
  4. }
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta name="viewport" content="width=device-width"/>
  9. <title>Index</title>
  10. <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  11. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
  12. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
  13. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
  14. <script> $(document).ready(function() { @if (Session["LogedUserID"] == null) { <text> $('#login').modal('show'); </text> } $("#l").click(function(event) { login(); }); $("#password").keydown(function(event) { if (event.which == 13) { event.preventDefault(); login(); } }); $("#username").keydown(function(event) { if (event.which == 13) { event.preventDefault(); $("#password").focus(); } }); $('#username').focus(function() { $("#username").popover('hide'); }); $('#alert').hide(); $('#password').focus(function() { $("#password").popover('hide'); }); }); function login() { if ($("#username").val() == "") { $("#username").popover({ trigger: 'manual', placement: 'bottom', html: 'true', content: '<span class="label label-danger"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span></span> Enter username' }); $('#username').popover('show'); return; } if ($("#password").val() == "") { $("#password").popover({ trigger: 'manual', placement: 'bottom', html: 'true', content: '<span class="label label-danger"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span></span> Enter password' }); $('#password').popover('show'); return; } $.ajax({ type: "POST", url: "/Home/Login", data: "username=" + $("#username").val() + "&password=" + $("#password").val(), datatype: "html", success: function(data) { if (data == 0) { $('#alert').fadeIn().delay(800).fadeOut(); } else { window.location.replace('/Home'); } } }); } </script>
  15. </head>
  16. <body>
  17. <div class="container-fluid">
  18. <!-- 静态导航栏 -->
  19. <nav class="navbar navbar-default">
  20. <div class="container-fluid">
  21. <div class="navbar-header">
  22. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
  23. <span class="sr-only">Toggle navigation</span>
  24. <span class="icon-bar"></span>
  25. <span class="icon-bar"></span>
  26. <span class="icon-bar"></span>
  27. </button>
  28. <a class="navbar-brand" href="#">BootStrap Testing</a>
  29. </div>
  30. <div id="navbar" class="navbar-collapse collapse">
  31. <ul class="nav navbar-nav">
  32. <li class="active">
  33. <a href="/Home">Home</a>
  34. </li>
  35. <li>
  36. <a href="/Todo">Todo List</a>
  37. </li>
  38. </ul>
  39. @if (Session["LogedUserID"] != null)
  40. {
  41. <text>
  42. <ul class="nav navbar-nav navbar-right">
  43. <li>
  44. <a href="/home/logout">LogOut</a>
  45. </li>
  46. </ul>
  47. </text>
  48. }
  49. </div><!--/.nav-collapse -->
  50. </div><!--/.container-fluid -->
  51. </nav>
  52. <div id="login" class="modal fade" data-keyboard="false">
  53. <div class="modal-dialog">
  54. <div class="modal-content">
  55. <div class="modal-header">
  56. <img style="height: 50px;" src="http://brighteyetea.com/assets/images/partners/bootstrap.png">
  57. <h4 class="modal-title"></h4>
  58. </div>
  59. <div class="modal-body">
  60. <div id="alert" class="alert alert-danger" role="alert">
  61. <strong>Oh snap!</strong> Username o Password error!!!
  62. </div>
  63. <div class="input-group">
  64. <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-user" aria-hidden="true"></span></span>
  65. <input type="text" id="username" class="form-control" placeholder="Username" aria-describedby="basic-addon1" required>
  66. </div>
  67. <br/>
  68. <div class="input-group">
  69. <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span>
  70. <input type="password" id="password" class="form-control" placeholder="Password" aria-describedby="basic-addon1" required>
  71. </div>
  72. </div>
  73. <div class="modal-footer">
  74. <button type="button" id="l" class="btn btn-primary"><span class="glyphicon glyphicon-log-in" aria-hidden="true"></span> Log in</button>
  75. </div>
  76. </div><!-- /.modal-content -->
  77. </div><!-- /.modal-dialog -->
  78. </div><!-- /.modal -->
  79. </div>
  80. @if (Session["LogedUserID"] != null)
  81. {
  82. <text>
  83. Welcome @Session["LogedUserID"].ToString()
  84. <a href="/Home/Logout">logout</a>
  85. </text>
  86. }
  87. </body>
  88. </html>

Shared文件夹

Master.cshtml

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="viewport" content="width=device-width"/>
  5. <title>Index</title>
  6. <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  7. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
  8. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
  9. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
  10. <style> .disabled { cursor: default; } #content { margin-left: auto; margin-right: auto; width: 80%; } </style>
  11. </head>
  12. <body>
  13. <ul class="nav nav-tabs">
  14. <li role="presentation" class="active">
  15. <a href="/Home">主页</a>
  16. </li>
  17. <li role="presentation">
  18. <a href="/Todo">待办事项列表</a>
  19. </li>
  20. <li role="presentation">
  21. <a href="#">Messages</a>
  22. </li>
  23. </ul>
  24. @RenderBody()
  25. </body>
  26. </html>

Todo文件夹

Index.cshtml

  1. @model IEnumerable<TodoList.Models.Todo>
  2. @{
  3. Layout = null;
  4. }
  5. @if (Session["LogedUserID"] == null)
  6. {
  7. Response.Redirect("~/HOME/");
  8. }
  9. <!DOCTYPE html>
  10. <html>
  11. <head>
  12. <meta name="viewport" content="width=device-width"/>
  13. <title>Index</title>
  14. <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  15. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
  16. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
  17. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
  18. @Scripts.Render("~/Scripts/index.js")
  19. <style> .disabled { cursor: default; } #content { margin-left: auto; margin-right: auto; width: 80%; } </style>
  20. </head>
  21. <body>
  22. <div class="container-fluid">
  23. <!-- 静态导航栏 -->
  24. <nav class="navbar navbar-default">
  25. <div class="container-fluid">
  26. <div class="navbar-header">
  27. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
  28. <span class="sr-only">Toggle navigation</span>
  29. <span class="icon-bar"></span>
  30. <span class="icon-bar"></span>
  31. <span class="icon-bar"></span>
  32. </button>
  33. <a class="navbar-brand" href="#">BootStrap Testing</a>
  34. </div>
  35. <div id="navbar" class="navbar-collapse collapse">
  36. <ul class="nav navbar-nav">
  37. <li>
  38. <a href="/Home">Home</a>
  39. </li>
  40. <li class="active">
  41. <a href="/Todo">Todo List</a>
  42. </li>
  43. </ul>
  44. @if (Session["LogedUserID"] != null)
  45. {
  46. <text>
  47. <ul class="nav navbar-nav navbar-right">
  48. <li>
  49. <a href="/home/logout">LogOut</a>
  50. </li>
  51. </ul>
  52. </text>
  53. }
  54. </div><!--/.nav-collapse -->
  55. </div><!--/.container-fluid -->
  56. </nav>
  57. <div class="row1">
  58. <div class="col-md-8">
  59. <div id="content" style="border: 0px solid red" class="panel panel-default">
  60. <div class="panel-heading">
  61. <h3 class="panel-title">Todo List</h3>
  62. </div>
  63. <div class="panel-body">
  64. <form>
  65. <div class="input-group">
  66. <input type="text" id="insertop" class="form-control" placeholder="你今天要做什么?" aria-describedby="basic-addon1">
  67. <span class="input-group-btn">
  68. <button class="btn btn-default" type="button"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
  69. </span>
  70. </div>
  71. </form>
  72. <br/>
  73. <div class="items">
  74. <ul id="sortable" class="list-group">
  75. @foreach (var item in Model)
  76. {
  77. <li value="@Html.DisplayFor(modelItem => item.Id)" class="list-group-item items">
  78. <button class="btn btn-warning btn-xs pull-right del">
  79. <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
  80. </button> @Html.DisplayFor(modelItem => item.Value)
  81. </li>
  82. }
  83. </ul>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. </body>
  91. </html>

运行结果如图:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读