Разделите запятую для вставки нескольких строк в базу данных (ASP. NET MVC) - PullRequest
2 голосов
/ 30 января 2020

У меня есть одна из таблиц с атрибутами: идентификатор, имя школы, имя студента. Я хочу вставить новый элемент, похожий на:

Название школы: Начальная школа (Список для выбора)

Имя ученика: A, B, C, D (TextBox)

Дата присоединения: 01.01.2020

А затем записи в таблице выглядят так:

id  | school_name       | student_name  | join_date
----+-------------------+---------------+----------------
1   | Elementary School | A             | 1/1/2020
2   | Elementary School | B             | 1/1/2020
3   | Elementary School | C             | 1/1/2020
4   | Elementary School | D             | 1/1/2020

Модель studentdb.cs

public partial class studentdb
{
        public int id { get; set; }
        public string school_name { get; set; }
        public string student_name { get; set; }
        public DateTime join_date { get; set; }
} 

CreateController.cs

[HttpPost]
public ActionResult CreateStudent(studentdb Student)
{
    string str = Student.studentdb;
    string[] splitstr = str.Split(',');

    foreach(string s in splitstr)
    {
         db.studentdb.Add(Student);
    }

    db.SaveChanges();

    return RedirectToAction("Index", "Create");
}

Create.cs html

<form class="form-horizontal" method="post" action="CreateStudent">
            <div><a href="#" id="addNew">Add New</a></div>
            <table class="table table-striped">

                <tr>
                    <td>School Name</td>
                    <td>
                      <select class="form-control" name="school_name">
                        <option>Elemtary School</option> 
                        <option>Junior High School</option> 
                      </select>  
                    </td>
                </tr>
                <tr>
                    <td>Name</td>
                    <td><input type="text" class="form-control" name="student_name" required></td>
                </tr>
                <tr>
                    <td>Join Date</td>
                    <td>
                        <div class="input-group">
                            <div class="input-group-addon">
                                <i class="fa fa-calendar"></i>
                            </div>
                            <input type="text" class="form-control pull-right"  name="join_date" required>
                        </div>
                    </td>
                </tr>
            </table>
            <div class="box-footer">
                <button type="submit" class="btn btn-primary">Submit</button>
            </div>
        </form>

Что мне делать для этого контроллера? Спасибо

Ответы [ 2 ]

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

Хорошо, в качестве альтернативы вы можете использовать AJAX для публикации значений вашей формы в вашем методе Controller. Вы можете применить какое-то правило в своем текстовом поле, чтобы принимать строку, содержащую , после пробела.

Ваш View будет выглядеть так:

<div><a href="#" id="addNew">Add New</a></div>
  <table class="table table-striped">    
    <tr>
      <td>School Name</td>
      <td>
        <select class="form-control" name="school_name" id="ddl_school_name">
          <option>Elemtary School</option> 
          <option>Junior High School</option> 
        </select>  
      </td>
    </tr>
    <tr>
      <td>Name</td>
      <td><input type="text" class="form-control" id="s_name" name="student_name" required></td>
    </tr>
    <tr>
      <td>Join Date</td>
      <td>
        <div class="input-group">
          <div class="input-group-addon">
            <i class="fa fa-calendar"></i>
          </div>
          <input type="text" class="form-control pull-right" id="j_date" name="join_date" required>
        </div>
      </td>
    </tr>
  </table>
  <div class="box-footer">
    <button type="button" class="btn btn-primary" onclick="SaveForm()">Submit</button>
  </div>

<script>
function SaveForm() {
  var schoolname = $("#ddl_school_name").find(':selected').text();
  var studentname= $("#s_name").val();
  var joindate= $("#j_date").val();

  var json = {
          schoolname: schoolname ,
          studentname: studentname,
          joindate: joindate
         };

  if (studentname== "" || joindate== "") {
      alert("Missing fields");
      return false;
  }

  $.ajax({
      type: "post",
      dataType: "json",
      data: {"json": JSON.stringify(json)},,
      url: "@Url.Action("CreateStudent","Create")",
      success: function (result) {
          alert("Inserted student data");
      },
      error:function(result){
          alert("Could not insert student data");
      }            
  });
}
</script>

И ваш Controller метод будет выглядеть так:

using System.Web.Script.Serialization;

[HttpPost]
public ActionResult CreateStudent(string json)
{

  var serializer = new JavaScriptSerializer();
  dynamic jsondata = serializer.Deserialize(json, typeof(object));

  //Get your variables here from AJAX call
  var schoolname= jsondata["schoolname"];
  var studentname= jsondata["studentname"];
  var joindate= jsondata["joindate"];

  studentdb student=new studentdb();
  student.school_name=schoolname;
  student.join_date=Convert.ToDateTime(joindate);

  string[] splitstr = studentname.Split(',');    
  foreach(string s in splitstr)
  {
     student.student_name=s;
     db.studentdb.Add(student);
  }

  db.SaveChanges();

  return RedirectToAction("Index", "Create");
}
1 голос
/ 30 января 2020

Привязать модель к контроллеру таким образом

    [HttpPost]
    public ActionResult CreateStudent(Classroom roomVm)
    {
        string str = roomVm.student_name;
        string[] studentNames= str.Split(',');

        foreach(string s in studentNames)
        { var student = new Student();

           student.student_name  =s;
           student.school_name=roomVm.school_name;
           student.join_date=roomVm.join_date;


             db.studentDbSet.Add(student);
        }

        db.SaveChanges();

        return RedirectToAction("Index", "Create");
    }
...