我的MVC创建视图甚至在我看到表单之前就试图插入到我的数据库中,为插入输入值
本文关键字:插入 我的 数据库 输入 视图 创建 MVC 表单 我看 | 更新日期: 2023-09-27 17:57:34
我的Create页面基本上是一个硬编码的表单,用于匹配我的QuestionModel中的insert语句中的参数。我的代码如下:
public string Create(int Poll_ID, int User_ID, int QuestionGroup, int QuestionType, string Text, int PartialAnswers, int Max, int QOrder, string DataType)
{
//int Permission = CheckPermissionMethod(Poll_ID, User_ID); //user permission id
int Permission = 3;
string Result; // message shown to user
int MaxQuestion_ID;
OleDbDataReader OleDbDataReader;
OleDbDataReader myOleDbDataReader;
if (Permission == 3)
{
if (QuestionGroup < 3) //MCQ or Participant List Question
{
//get the maximum question id
OleDbDataReader = DBConn("SELECT MAX(Question_ID) '"Question_ID'" FROM MCQ_QUESTIONS");
OleDbDataReader.Read();
MaxQuestion_ID = Convert.ToInt32(OleDbDataReader["Question_ID"]) + 1;
myOleDbConnection.Close();
Result = "Question was added to your poll! ";
}
else
Result = "You are not permitted to create a question.";
return Result;
}
这是我的模型下的问题模型的一部分。
<% using (Html.BeginForm("Index", "Question", FormMethod.Post)) { %>
<% if (!string.IsNullOrEmpty((string) ViewData["ErrorMessage"])) { %>
Poll_Id: <%= Html.TextBox("Poll_Id")%><br />
User_Id: <%= Html.TextBox("User_Id")%><br />
QuestionGroup: <%= Html.TextBox("QuestionGroup")%><br />
QuestionType: <%= Html.TextBox("QuestionType")%><br />
Text: <%= Html.TextBox("Text")%><br />
PartialAnswers: <%= Html.TextBox("PartialAnswers")%><br />
Max: <%= Html.TextBox("Max")%><br />
QOrder: <%= Html.TextBox("QOrder")%><br />
DataType: <%= Html.TextBox("DataType")%><br />
<input type="submit" value="Submit" />
我的问题控制器如下:
public ActionResult Create()
{
QuestionModel Question = new QuestionModel();
int Poll_Id = Convert.ToInt32(TempData["Poll_Id"]);
int User_Id = Convert.ToInt32(TempData["User_Id"]);
int QuestionGroup = Convert.ToInt32(TempData["QuestionGroup"]);
int QuestionType = Convert.ToInt32(TempData["QuestionType"]);
string Text = Convert.ToString(TempData["Text"]);
int PartialAnswers = Convert.ToInt32(TempData["PartialAnswers"]);
int Max = Convert.ToInt32(TempData["Max"]);
int QOrder = Convert.ToInt32(TempData["QOrder"]);
string DataType = Convert.ToString(TempData["DataType"]);
Question.Create(Poll_Id, User_Id, QuestionGroup, QuestionType, Text, PartialAnswers, Max, QOrder, DataType);
return View();
}
public ActionResult Submit()
{
TempData["Poll_Id"] = Convert.ToInt32(Request.Form["Poll_Id"]);
TempData["User_Id"] = Convert.ToInt32(Request.Form["User_Id"]);
TempData["QuestionGroup"] = Convert.ToInt32(Request.Form["QuestionGroup"]);
TempData["QuestionType"] = Convert.ToInt32(Request.Form["QuestionType"]);
TempData["Text"] = Request.Form["Text"];
TempData["PartialAnswers"] = Convert.ToInt32(Request.Form["PartialAnswers"]);
TempData["Max"] = Convert.ToInt32(Request.Form["Max"]);
TempData["QOrder"] = Convert.ToInt32(Request.Form["QOrder"]);
TempData["DataType"] = Request.Form["DataType"];
//return RedirectToAction("Create");
ViewData["Poll_Id"] = "Setting the values";
return View();
}
}
我的第一个路线条目如下:
routes.MapRoute(
"Question", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Question", action = "Index", id = "" } // Parameter defaults
);
我只想能够看到我的html表单,输入值,点击提交,页面会相应地创建条目并将其插入到我的MCQ_Questions表中。任何帮助都非常感谢!
通常是如何实现这一点的
- 具有两个单独的
Create
动作 - 用CCD_ 2装饰一个。在这里,您只需返回带有默认模型的视图
- 另一个用CCD_ 3装饰。在这里,您插入到数据库中,如果验证通过,则返回
Display
操作,否则返回带有错误的视图
我建议您将ViewModel创建为一个类。
public class CreateViewModel
{
public int Poll_id = {get ; set;}
//...
}
//View would look like (inherits from CreateViewModel)
<%: Html.TextBoxFor(m => m.Poll_id) %>
//Controller
public ActionResult Create()
{
CreateViewModel newCreateView= new CreateViewModel();
return View(newCreateView);
}
[HttpPost]
public ActionResult Create(CreateViewModel newCreateView)
{
//Put code to save all into database here
return RedirectToAction("Index");
}
在视图中写入数据后,它将对数据进行汇总。