我正在使用nhibernate在MVC3中开发一个应用程序。 这是一个问答网站,在第一页上,问题显示为链接,底部的文本区域输入问题。 我已经制作了一个类和一个映射文件。 问题类:
public class Questions
{
public virtual int QuestionID { get; set; }
[Required]
public virtual string Question { get; set; }
public virtual int CreatedBy{ get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual int ModifiedBy { get; set; }
public virtual DateTime ModifiedDate { get; set; }
public virtual char Deleted { get; set; }
public virtual IList<Answers> Answer { get; set; }
}
这是映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly ="Core" namespace ="Core.Model" >
<class name ="Questions" >
<id name="QuestionID">
<generator class="native" />
</id>
<property name="Question"/>
<property name="CreatedBy" />
<property name="CreatedDate" />
<property name="ModifiedBy" />
<property name="ModifiedDate" />
<property name="Deleted"/>
<bag name="Answer" table="ANSWERS" lazy="true">
<key column="FKQuestionID"/>
<one-to-many class="Core.Model.Answers"/>
</bag>
在控制器内部保存时我已经知道了:
[HttpPost]
public ActionResult Question_Page(Questions ques, string PostyourQuestion)
{
ques.Question = PostyourQuestion;
ques.CreatedDate = DateTime.Now;
ques.ModifiedDate = DateTime.Now;
ques.CreatedBy = 101;
ques.ModifiedBy = 101;
if (ModelState.IsValid)
{
new QuestionService().SaveOrUpdateQuestions(ques);
}
return View(new QuestionService().GetAllQuestions());
}
内部视图:
@using (Html.BeginForm("Question_Page","QuestionAnswer",FormMethod.Post))
{
@Html.ValidationSummary(false)
<ul>
@foreach (var item in Model)
{
<li>@Html.ActionLink(item.Question, "Answer_Page", new { Id = item.QuestionID}) </li>
}
</ul>
<br />
<h2><label for="PostyourQuestion:">Post your Question:</label></h2>
@Html.TextArea("PostyourQuestion")
<br /><br />
<input type="submit"/>
}
现在的问题是它没有保存在“PostyourAnswer”textarea.even中输入的值,如果在其中输入值。如果我删除了必需的属性,它将保存表中的数据但我需要提供一些验证时用户不输入数据。请帮我解决这个问题
答案 0 :(得分:0)
在ViewModel / Model中,添加一个MultilineText属性以浏览Question Property,以便在以后将其呈现为文本区域。
[Required]
[DataType (DataType.MultilineText)]
public virtual string Question { get; set; }
更改@Html.TextArea("PostyourQuestion")
到
@Html.EditorFor(m => m.Question)
答案 1 :(得分:0)
创建一个“视图模型” - 一个包含视图所需属性的特殊类,并将其用作视图的模型。
E.g。
public class AddQuestionViewModel
{
public List<Question> Questions { get; set; }
[Required]
[DataType (DataType.MultilineText)]
public string QuestionToAsk{ get; set; }
}
然后你的观点看起来像
@using (Html.BeginForm("Question_Page","QuestionAnswer",FormMethod.Post))
{
@Html.ValidationSummary(false)
<ul>
@foreach (var item in Model)
{
<li>@Html.ActionLink(item.Question, "Answer_Page", new { Id = item.QuestionID}) </li>
}
</ul>
<br />
<h2><label for="PostyourQuestion:">Post your Question:</label></h2>
@Html.EditorFor(x => x.QuestionToAsk)
<br /><br />
<input type="submit"/>
和您的控制器
[HttpPost]
public ActionResult Question_Page(AddQuestionViewModel viewModel)
{
if (ModelState.IsValid)
{
var ques = new Question();
ques.Question = viewModel.QuestionToAsk;
ques.CreatedDate = DateTime.Now;
ques.ModifiedDate = DateTime.Now;
ques.CreatedBy = 101;
ques.ModifiedBy = 101;
new QuestionService().SaveOrUpdateQuestions(ques);
}
return View(new QuestionService().GetAllQuestions());
}