NHibernate / ASP.NET textarea绑定问题

时间:2012-03-25 14:25:07

标签: asp.net-mvc asp.net-mvc-3 nhibernate textarea modelstate

我正在使用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中输入的值,如果在其中输入值。如果我删除了必需的属性,它将保存表中的数据但我需要提供一些验证时用户不输入数据。请帮我解决这个问题

2 个答案:

答案 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());
}