- 这个很重要,主要为了秋哥搞这个,但这个也麻烦呀,需要重新理一下思路。
- 应该文章和题目是一个表
- 题目和答案是一个表
- 最后都要送错误到题目上
- 这里还需要设计一个图片的上传功能
- 阅读题,我就不分单元了:)按年级来了。
- 题目表的的文章表的ID
- 错误次数就不好理解了,我一直想以小题作为错误,但是反过来不好JOIN,还是以大小表都加错误次数,到时再次做的时候,可以不用做已正确的,次>0的
- 然后附表就和单选填空一样的拉,只是多一个字段用于关联上面表EnReading的ID,分表叫EnReadingQuestions
上实体,要注意字数,阅读的这数就很多拉
<Table Name="EnReading" Description="英语阅读" RenderGenEntity="True">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="Grade" DataType="String" Description="年级" />
<Column Name="Subhead" DataType="String" Description="小标题" />
<Column Name="SubjectContent" DataType="String" Length="600" Description="英文内容" />
<Column Name="ChineseDescription" DataType="String" Length="600" Description="中文翻译" />
<Column Name="Analysis" DataType="String" Length="400" Description="解析" />
<Column Name="Pic" DataType="String" Description="图片" />
<Column Name="Bei1" DataType="String" Length="400" Description="备注1" />
<Column Name="Bei2" DataType="String" Length="400" Description="备注2" />
<Column Name="TestNumbers" DataType="Int32" Description="测试次数" />
<Column Name="ErrorNumbers" DataType="Int32" Description="错误次数" />
<Column Name="CreateUser" DataType="String" Description="创建者" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
</Columns>
</Table>
<Table Name="EnReadingQuestions" Description="英语阅读题" RenderGenEntity="True">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="Grade" DataType="String" Description="年级" />
<Column Name="EnReadingID" DataType="Int32" Description="阅读ID" />
<Column Name="SubjectText" DataType="String" Description="题目" />
<Column Name="SubjectType" DataType="String" Description="类型" />
<Column Name="EnglishDescription" DataType="String" Length="200" Description="英文说明" />
<Column Name="ChineseDescription" DataType="String" Length="200" Description="中文说明" />
<Column Name="Analysis" DataType="String" Length="400" Description="解析" />
<Column Name="OptionA" DataType="String" Length="400" Description="选项A" />
<Column Name="OptionB" DataType="String" Length="400" Description="选项B" />
<Column Name="OptionC" DataType="String" Length="400" Description="选项C" />
<Column Name="OptionD" DataType="String" Length="400" Description="选项D" />
<Column Name="Answers" DataType="String" Length="400" Description="答案" />
<Column Name="Bei1" DataType="String" Length="400" Description="备注1" />
<Column Name="Bei2" DataType="String" Length="400" Description="备注2" />
<Column Name="TestNumbers" DataType="Int32" Description="测试次数" />
<Column Name="ErrorNumbers" DataType="Int32" Description="错误次数" />
<Column Name="CreateUser" DataType="String" Description="创建者" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
</Columns>
</Table>
- 生成图片
- 因为这个需要先加文章,再加题目,所以用魔方还不好加得。得弄个CREAT页面。
增加一个视图
public IActionResult EnReadingAdmin() { return View(); }
先新建一个菜单
然后在中间增加链接的内容即可。
弄区域。
- 其实有点繁顼,可以用英语一个菜单的,但我想用魔方的表管理,真是方便呀。
建立新建阅读
后台
[HttpGet]
public IActionResult CreatEnReading(int? id = null)
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreatEnReading( EnReading enreading)
{
if (ModelState.IsValid)
{
var enreading1 = new EnReading
{
Grade = enreading.Grade,
Subhead = enreading.Subhead,
SubjectContent = enreading.SubjectContent,
ChineseDescription = enreading.ChineseDescription,
Analysis = enreading.Analysis,
Bei1 = enreading.Bei1,
TestNumbers =1,
ErrorNumbers = 0
};
enreading1.Insert();
return RedirectToAction(nameof(EnReadingList));
}
return View();
}
前台
@model XCode.Membership.EnReading
<div style="margin-top:30px;"></div>
<h1>新增英语阅读题</h1>
<hr />
<h4>注意我在后台用的|换为换行符,年级一定要是789这种小数字.</h4>
<hr />
<div class="row">
<div class="col-md-12">
<form asp-action="CreatEnReading" method="post">
@Html.AntiForgeryToken()
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Grade" class="control-label"></label>
<input asp-for="Grade" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Subhead" class="control-label"></label>
<input asp-for="Subhead" class="form-control" />
</div>
<div class="form-group">
<label asp-for="SubjectContent" class="control-label"></label>
<textarea asp-for="SubjectContent" class="form-control" style="height:222px;"></textarea>
</div>
<div class="form-group">
<label asp-for="ChineseDescription" class="control-label"></label>
<textarea asp-for="ChineseDescription" class="form-control" style="height:222px;"></textarea>
@*<input asp-for="ChineseDescription" type="text" class="form-control" />*@
</div>
<div class="form-group">
<label asp-for="Analysis" class="control-label"></label>
<textarea asp-for="Analysis" class="form-control" style="height:160px;"></textarea>
</div>
<div class="form-group">
<label asp-for="Bei1" class="control-label"></label>
<textarea asp-for="Bei1" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" /> <a asp-action="Index">Back to List</a>
</div>
</form>
</div>
</div>
<div>
</div>
<div style="margin-bottom:70px;width:100%;"></div>
样式
建立所有阅读LIST
这个会送一个到新建题目的东东
public IActionResult EnReadingList(int? EnReadingID = null)
{
var mmm = EnReading.FindAll(null, null, null,0 ,8);
///当ID不为空的时候,肯定就是有值进来的时候拉。在文章下面显示题
if (EnReadingID != null) {
var EnreadingTm = EnReadingQuestions.FindAll(EnReadingQuestions._.EnReadingID== EnReadingID);
ViewBag.enreadingtm = EnreadingTm;
}
return View(mmm);
}
前台
@model IList<XCode.Membership.EnReading>
<h2>阅读的列表</h2>
<table class="table">
<thead>
<tr>
<th>
ID
</th>
<th>
英文内容
</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ID)
</td>
<td>
@Html.DisplayFor(modelItem => item.SubjectContent)
<p>
@if (@ViewBag.enreadingtm != null)
{
@foreach (var V in ViewBag.enreadingtm as IList<XCode.Membership.EnReadingQuestions>)
{
@if (@V.EnReadingID==@item.ID) { <p style="color:#0094ff;"> @V.EnReadingID - @V.EnglishDescription ; </p>}
}
}
</p>
</td>
<td>
<a asp-action="CreatEnReadingTimu" asp-route-EnReadingID="@item.ID" type="button" class="btn btn-info btn-sm">加题</a>
</td>
<td>
<a asp-action="EnReadingList" asp-route-EnReadingID="@item.ID" type="button" class="btn btn-info btn-sm">已加</a>
</td>
</tr>
}
</tbody>
</table>
通过阅读点击增加题目
后台
[HttpGet]
public IActionResult CreatEnReadingTimu(int EnReadingID)
{
ViewBag.TimuID = EnReadingID;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreatEnReadingTimu(EnReadingQuestions enreading2)
{
if (ModelState.IsValid)
{
var enreading1 = new EnReadingQuestions
{
EnReadingID = enreading2.EnReadingID,
SubjectText = enreading2.SubjectText,
SubjectType = enreading2.SubjectType,
EnglishDescription = enreading2.EnglishDescription,
ChineseDescription = enreading2.ChineseDescription,
Analysis = enreading2.Analysis,
OptionA = enreading2.OptionA,
OptionB = enreading2.OptionB,
OptionC = enreading2.OptionC,
OptionD = enreading2.OptionD,
Answers = enreading2.Answers,
Bei1 = enreading2.Bei1,
TestNumbers = 1,
ErrorNumbers = 0
};
enreading1.Insert();
return RedirectToAction(nameof(EnReadingList));
}
return View();
}
前台
@model XCode.Membership.EnReadingQuestions
<div style="margin-top:30px;"></div>
<h1>新增英语阅读的题目</h1>
<hr />
<h4>注意我在后台用的|换为换行符,年级一定要是789这种小数字.</h4>
<hr />
<div class="row">
<div class="col-md-12">
<form asp-action="CreatEnReadingTimu" method="post">
@Html.AntiForgeryToken()
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="EnReadingID" style='display:none' value=@ViewBag.TimuID>
<div class="form-group">
<label asp-for="SubjectText" class="control-label"></label>
<input asp-for="SubjectText" class="form-control" />
</div>
<div class="form-group">
<label asp-for="SubjectType" class="control-label"></label>
<input asp-for="SubjectType" class="form-control" placeholder="0为选择,1为填空,3为不分析全对!" />
</div>
<div class="form-group">
<label asp-for="EnglishDescription" class="control-label"></label>
<textarea asp-for="EnglishDescription" class="form-control" style="height:162px;"></textarea>
</div>
<div class="form-group">
<label asp-for="ChineseDescription" class="control-label"></label>
<textarea asp-for="ChineseDescription" class="form-control" style="height:162px;"></textarea>
@*<input asp-for="ChineseDescription" type="text" class="form-control" />*@
</div>
<div class="form-group">
<label asp-for="Analysis" class="control-label"></label>
<textarea asp-for="Analysis" class="form-control" style="height:160px;"></textarea>
</div>
<div class="form-group">
<label asp-for="OptionA" class="control-label"></label>
<textarea asp-for="OptionA" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<label asp-for="OptionB" class="control-label"></label>
<textarea asp-for="OptionB" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<label asp-for="OptionC" class="control-label"></label>
<textarea asp-for="OptionC" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<label asp-for="OptionD" class="control-label"></label>
<textarea asp-for="OptionD" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<label asp-for="Answers" class="control-label"></label>
<input asp-for="Answers" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Bei1" class="control-label"></label>
<textarea asp-for="Bei1" class="form-control" style="height:80px;"></textarea>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" /> <a asp-action="Index">Back to List</a>
</div>
</form>
</div>
</div>
<div>
</div>
<div style="margin-bottom:70px;width:100%;"></div>
效果
下面就是如何出题的事宜了
- 因为为了考虑手机使用,我个人思考,还是使用了分页,一页一题。
- 将文章的内容用viewbag传前台,平时做成隐藏,需要时点开。
- 出题时,我觉得按年级抽,不分单元了,这样稍好一些
- 先随及抽题成这样拉
分页也弄好了,就是卡在思路这。
要是这个文章ID,不停的传来传去的,是不是好麻烦:)
后来想,最简单莫过于,做完所有小题,直接又回到最开始选择抽题界面,是按单元,还是按所有。