1

私がやろうとしていることは本当に簡単であるべきだと思います(そしてそれは私を愚かに感じさせます)が、私はそれを理解できないので、HTTP POSTの方法を理解していないと思います.

コントローラーは QuoteDimensionViewModel QDVM を作成し、それをビューに送信します。ビューは、モデル内のさまざまな変数のテキスト ボックスを含む Web ページを作成します。ユーザーはそれらのテキストボックスに入力します。ユーザーが HTTP ポストを生成するボタンをクリックすると、モデルがテキストボックスからの新しい値で更新され、コントローラーに送信されます。コントローラーはそれを行い、私たちは皆幸せに暮らしています.

ユーザーがボタンを押すと、新しい QuoteDimensionViewModel が作成され、それらに関連付けられたテキスト ボックスを持つ値のみが入力されます。したがって、この場合、変数 Eid のテキスト ボックスがないため、Eid の値は Get で 5 になる可能性がありますが、Post の値は常に 0 です。これにより、IValidatableObject でデータを検証しようとすると問題が発生します。

TLDR; 基本的に、X 変数を持つモデルをビューに送信し、それらの変数の Y を変更したいと考えています。更新されたモデルを変更で検証し、コントローラーに POST で戻します。

助けと提案をありがとう

まずモデル:

public class QuoteDimensionViewModel
    {
        private QuoteDatabaseEntities Quotedb = new QuoteDatabaseEntities();
        [Required]
        public string ShowerImage { get; set; }
        [Required]
        public EnclosureDimension EnclosureDimensions { get; set; } \\Wrapper class
        [Required]
        public QuoteDimensionsWrapper QuoteDimensions { get; set; } \\Wrapper class
        [Required]
        public int Eid { get; set; }
        [Required]
        public int Sid { get; set; }
        [Required]
        public int Hid { get; set; }
        [Required]
        public int Gid { get; set; }
        public QuoteDimensionViewModel(){ }
        public QuoteDimensionViewModel(int eid, int sid, int hid, int gid)
        {
            Eid = eid;
            Sid = sid;
            Hid = hid;
            Gid = gid;


            this.ShowerImage = (from x in Quotedb.Showers
                           where x.ID == Sid
                           select  x.Picture ).Single();

            this.EnclosureDimensions = (from x in Quotedb.EnclosureDimensions


                                          where (x.Enclosure_ID_FK == Eid)
                                       select x).Single();
            this.QuoteDimensions = new QuoteDimensionsWrapper(Eid);





           }
    }
public class QuoteDimensionsWrapper: IValidatableObject
        {
            public int Eid { get; set; }
            public int ID { get; set; }
            public int Quote_ID_FK { get; set; }
            public double Height { get; set; }
            public double Width { get; set; }

            public QuoteDimensionsWrapper(int eid)
            {
                Eid = eid;
            }
            public QuoteDimensionsWrapper()
            {

                }
            public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
            {
             \\Validation stuff based on the value of Eid
             }

今コントローラ:

 public class QuoteDimensionViewModelController : Controller
{

    public ActionResult Quote(int Eid, int Sid, int Hid, int Gid)
    {

        QuoteDimensionViewModel QDVM = new QuoteDimensionViewModel(Eid, Sid, Hid, Gid);

        return View(QDVM);
    }
    [InitializeSimpleMembership]
    [HttpPost]
    public ActionResult Quote(QuoteDimensionViewModel QDVM)
    {
         //Validate the Data then write it to a database

        return RedirectToAction("Index", "QuoteViewModel", new { id = myQid });

    }

}

}

そしてビュー:

@model QuoteWebApp.Models.ViewModels.QuoteDimensionViewModel

@{
    ViewBag.Title = "Quote";
}

<h2>Dimensions</h2>

<img src=@Url.Content(Model.ShowerImage) alt="Image" />

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>QuoteDimensions</legend>

    <div class="editor-label">
        @Html.LabelFor(model =>model.QuoteDimensions.Height)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model =>model.QuoteDimensions.Height)
        @Html.ValidationMessageFor(model =>model.QuoteDimensions.Height)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model =>model.QuoteDimensions.Width)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.QuoteDimensions.Width)
        @Html.ValidationMessageFor(model => model.QuoteDimensions.Width)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model =>model.QuoteDimensions.DoorWidth)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.QuoteDimensions.Width)
        @Html.ValidationMessageFor(model => model.QuoteDimensions.Width)
    </div>     

     }
        <p>
            <input type="submit" value="Quote"  />
        </p>
    </fieldset>
}
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
4

1 に答える 1

1

GET から POST まで保持したいが、ユーザーには表示したくない値の非表示フィールドを作成します。

@Html.HiddenFor(model=>model.Eid)
于 2013-07-12T19:25:37.843 に答える