【发布时间】:2016-02-29 06:28:00
【问题描述】:
- 我有三个模型,问题表,答案选项表, 正确答案表。Questiontable 的 QuestionId 是 Answeroption tbl 中的外键,Answer tbl 的 AnswerId 是正确答案 tbl 中的外键。我做了三个存储过程,我做了所有的工作 在一个存储过程中,这样当我执行 sp.insertintoquestion 时, 它在问题表中插入数据,同时插入 各个表中的外键。现在我不知道如何插入 从控制器到不同模型的数据以及如何在 看法。我是新人,请帮帮我。
我的存储过程如下。 此存储过程将数据插入 AnswerOptiontbl 并将外键插入 Correctanswer tbl。
ALTER procedure [dbo].[InsertIntoAnswer]
(
@questionid int,
@OptionA nvarchar(50),
@OptionB nvarchar(50),
@OptionC nvarchar(50),
@OptionD nvarchar(50),
@CorrectOption nvarchar(50)
)
as
begin
insert into Answertbl(QuestionId,OptionA,OptionB,OptionC,OptionD,CorrectOption)
values(@questionid,@OptionA,@OptionB,@OptionC,@OptionD,@CorrectOption)
end
sp.insert 正确答案。此存储过程将数据插入到 CorrectAnswer 表中。
ALTER procedure [dbo].[InsertCorrectAnswer]
(
@AnswerId int,
@CorrectAnswer nvarchar(50)
)
as
begin
insert into CorrectAnswertbl(AnswerId,CorrectAnswer)
values(@AnswerId,@CorrectAnswer)
end
现在我在下面的存储过程中定义我的整个逻辑。 sp.插入问题。作为这个 sp exec,它会将数据插入 questiontbl、answeroption 表和正确答案 tbl。同时插入 FK questionid 到 Answeroption 表和 Fk AnswerId 到 CorrectAnswer tbl
ALTER procedure [dbo].[InsertIntoQuestion]
(
@QuestionText nvarchar(50),
@QuestionTypeId int,
@QuestionLevelId int,
@questionid int out,
@OptionA nvarchar(50),
@OptionB nvarchar(50),
@OptionC nvarchar(50),
@OptionD nvarchar(50),
@CorrectOption nvarchar(50),
@AnswerId int out,
@CorrectAnswer nvarchar(50)
)
as
begin
insert into Questiontbl(QuestionText,QuestionTypeId,QuestionLevelId)
values( @QuestionText,@QuestionTypeId,@QuestionLevelId)
select @questionid= scope_identity();
exec InsertIntoAnswer @questionid,@OptionA,@OptionB,@OptionC,@OptionD,@CorrectOption
select @AnswerId=SCOPE_IDENTITY();
exec InsertCorrectAnswer @AnswerId,@CorrectAnswer
end
由于我使用的是 DataBase Ist 方法,因此在 Repositry 类中我定义了以下方法,并将参数传递给存储过程所需的参数。但我不确定我的方法是否正确。
public void InsertQuestions( string QuestionText,int QuestionTypeId, int QuestionLevelId, string OptionA, string OptionB,string OptionC,string OptionD,string CorrectOption,string CorrectAnswer,ObjectParameter questionid=null,ObjectParameter AnswerId=null)
{
db.InsertIntoQuestion(QuestionText, QuestionTypeId, QuestionLevelId, questionid, OptionA, OptionB, OptionC, OptionD, CorrectOption, AnswerId, CorrectAnswer);
}
我在控制器中编写以下代码。 QuestionTypeId 和 QuestionLevelId 是 Questiontbl 中来自 QuestionTypetbl 和 QuestionLeveltbl 的外键。我把这些写在选择列表中。在插入过程中,我将在下拉列表中从相应的表格中选择这两个。
public class MyScoreController : Controller
{
ScoreApplication app = new ScoreApplication();
scoredbEntities db = new scoredbEntities();
//
// GET: /MyScore/
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
ViewBag.QuestionTypeId = new SelectList(db.QuestionTypetbls, "QuestionTypeId", "QuestionType");
ViewBag.QuestionLevelId = new SelectList(db.QuestionLeveltbls, "QuestionLevelId", "QuestionLevel");
return View();
}
[HttpPost]
public ActionResult Create()
{
if (ModelState.IsValid)
{
//Now i dont now what to do here.
}
return View();
}
}
以下是视图,但是这个视图只有一个模型,我不知道如何在同一个视图中显示其他模型的数据。
@model MyScoreProject.Models.Questiontbl
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Questiontbl</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.QuestionText, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.QuestionText)
@Html.ValidationMessageFor(model => model.QuestionText)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.QuestionTypeId, "QuestionTypeId", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("QuestionTypeId", String.Empty)
@Html.ValidationMessageFor(model => model.QuestionTypeId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.QuestionLevelId, "QuestionLevelId", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("QuestionLevelId", String.Empty)
@Html.ValidationMessageFor(model => model.QuestionLevelId)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
【问题讨论】:
标签: asp.net-mvc-4 model-view-controller