1

MVC4を使用してビューからコントローラーにパラメーターを戻す際に問題が発生しました。

これは私のモデルのクラスです(このコードはすべて申し訳ありませんが、最初は画像を投稿したかったのですが、初心者であるため許可されていません):

    public class Form
{
    public Form()
    {
        this.Rows = new List<Row>();
    }

    public List<Row> Rows { get; set; }
}

public abstract class Row
{
    protected Row()
    {
        this.Label = string.Empty;
        this.Type = string.Empty;
    }

    public string Label { get; set; }

    public string Type { get; set; }
}

    public class SimpleRow : Row
{

    public SimpleRow()
    {
        this.Value = string.Empty;
    }

    public string Value { get; set; }
}

    public class CheckRow : Row
{
    public CheckRow()
    {
        this.CheckedItems = new List<CheckedItem>();
        this.Id = 0;
    }

    public List<CheckedItem> CheckedItems { get; set; }

    public int Id { get; set; }
}

    public class CheckedItem
{
    public CheckedItem()
    {
        this.Title = string.Empty;
        this.Checked = false;
    }

    public string Title { get; set; }

    public bool Checked { get; set; }
}

モデルのシリアル化である入力xmlファイルからビューを構築することができました。しかし、私の問題は、ビューの値を変更して保存ボタンを押すと、コントローラー関数で空のパラメーターが返されることです。

コントローラー:

public class FormController : Controller
{
    // GET: /Form/
    #region Public Methods and Operators

    [Authorize]
    public ActionResult Index(HttpPostedFileBase file)
    {
        this.ViewBag.Title = "Formulaire Collaborateur";

        if (file != null && file.ContentLength > 0)
        {
            return this.View(SerialisationHelper.DeserializeFromStream<Form>(file.InputStream));
        }

        return this.View();
    }

    [HttpPost]
    [Authorize]
    public ActionResult EmailForm(Form updatedForm)
    {
        Form f = updatedForm;  // Empty instance of Form       

        return this.View("Index");
    }
    #endregion
}

そして私の見解:

@model Form
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm("EmailForm", "Form", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
       @foreach (var row in Model.Rows)
    {
        @Html.Partial("Row", row)
    }
    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
<br />
}

このビューは、モデルクラスに関連付けられている他のビューを呼び出します。

さらにコードが必要な場合は投稿します。そして、どうか、私の英語を失礼します、私はネイティブスピーカーではありません。

フローレント

4

1 に答える 1

1

コードから何をしているのかはあまり明確ではありませんが@Html.Partial("Row", row)、とにかく、このタイプのEditorTemplateを作成してから、それを使用する必要があります:Row

@foreach (var row in Model.Rows)
{
    @Html.EditorFor(m=>row)
}
于 2012-06-27T14:39:10.613 に答える