Проблема привязки текстовой области в NHibernate / ASP.NET - PullRequest
0 голосов
/ 25 марта 2012

Я занимаюсь разработкой приложения в MVC3 с использованием nhibernate. Это форум вопросов и ответов, где на первой странице вопросы отображаются в виде ссылки вместе с текстовой областью внизу для ввода вопроса. Я сделал класс и файл сопоставления для того же. Класс вопроса:

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 голосов
/ 26 марта 2012

Создайте «Модель представления» - специальный класс, содержащий свойства, необходимые для вашего представления, и используйте его в качестве модели представления.

Например

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());
}
0 голосов
/ 25 марта 2012

В вашей ViewModel / Model добавьте атрибут MultilineText в тур Свойство Вопроса, чтобы он отображался как текстовая область, когда.

[Required]
[DataType (DataType.MultilineText)]
public virtual string Question { get; set; }

Изменение @Html.TextArea("PostyourQuestion")
до

@Html.EditorFor(m => m.Question)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...