0

私は次の方法でコントローラーを持っています:

  public ActionResult Create()
        {
            return View();
        }

        [Authorize]
        [HttpPost]
        public ActionResult Create(Tests test)
        {
            test.CreateDate = DateTime.Now;
            test.Author = User.Identity.Name;
            TestEntities db = new TestEntities();
            db.AddToTests(test);
            db.SaveChanges();
            return RedirectToAction("CreateQuestion", new { OrderNumber = 1, idTest = test.id });
        }

        [Authorize]
        public ActionResult CreateQuestion(int OrderNumber,int idTest)
        {
            return View();
        }

        [Authorize]
        [HttpPost]
        public ActionResult CreateQuestion(Questions question)
        {
            TestEntities db = new TestEntities();
            db.AddToQuestions(question);
            db.SaveChanges();
            return RedirectToAction("CreateQuestion", new {id = question.id, t = question.Type});
        }

問題は、メソッドの作成が正しく機能することです。パラメータを取得してDBに追加します。ただし、同様のメソッド CreateQuestion は、質問が null であるというメッセージを表示します。私は何を間違っていますか?

質問ビューの作成

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<test.su.Models.Questions>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Создать вопрос
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Создать вопрос</h2>

<% using (Html.BeginForm("CreateQuestion","Test")) { %>
    <%: Html.ValidationSummary(true) %>
    <fieldset>
        <legend>Вопрос</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Type,"Тип вопроса") %>
        </div>

        <% // List of question types
            List<SelectListItem> QuestionTypes = new List<SelectListItem>();
            SelectListItem t = new SelectListItem();
            t.Text = "Вопрос с вариантами ответа (флажки или радиокнопки)";
            t.Value = "0";
            QuestionTypes.Add(t);
            t = new SelectListItem();
            t.Text = "Вопрос со свободным ответом (текстовое поле)";
            t.Value = "1";
            QuestionTypes.Add(t);
             %>


        <div class="editor-field">
            <%: Html.DropDownListFor(model => model.Type, QuestionTypes) %>
            <%: Html.ValidationMessageFor(model => model.Type) %>
        </div>

<%--        <div class="editor-label">
            <%: Html.LabelFor(model => model.OrderNumber,"Порядковый номер вопроса") %>
            <%: Html.EditorFor(model => model.OrderNumber) %>
            <%: Html.ValidationMessageFor(model => model.OrderNumber) %>
        </div>--%>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Question,"Текст вопроса") %>
        </div>
        <div class="editor-field">
            <%: Html.TextAreaFor(model => model.Question,2,47,"") %> 
            <%: Html.ValidationMessageFor(model => model.Question) %>
        </div>
        <%: Html.HiddenFor(model => model.idTest) %>
        <%: Html.ValidationMessageFor(model => model.idTest) %>
        <%: Html.HiddenFor(model => model.OrderNumber ) %>
        <%: Html.ValidationMessageFor( model => model.OrderNumber) %>
        <p>
            <input type="submit" value="Далее" />
        </p>
    </fieldset>
<% } %>
</asp:Content>
4

1 に答える 1

0

これは型式がわからないとわかりにくいです。他の誰かがより良い答えを提供するかもしれませんが、今のところ私が考えることができる唯一のことは次のとおりです。

質問モデルが次のようになっている場合:

public class Questions
{
  int Id {get;set;}
  string Name {get;set;}
  string Description {get;set;}
}

現時点でできることは、コントローラーを変更して個々のパラメーターを受け入れ、自分でオブジェクトを作成することです。これは、モデルのどの重要なプロパティが欠落しているかを把握するのに役立つ場合があります。

public ActionResult CreateQuestion(string Name, string Description)
{
  //make the entity yourself
  Questions newQuestion = new Questions()
  {
    Name = Name,
    Description = Description
  }
  //your other code here
}

通常、MVC はフォーム (ビュー) の個々の値をモデルにバインドするのに十分スマートですが、いくつかの重要な値が欠落しており、問題を引き起こしています。それが何であるかを理解したら、実際にコントローラーを復元して、質問オブジェクトのみを受け入れるように戻すことができます。

申し訳ありませんが、これ以上お手伝いできませんでした。

幸運を。

于 2013-03-10T20:15:52.307 に答える