1

私はWeb開発へのmvc方法を初めて使用します。インデックスと保存の2つのアクションを持つホームコントローラーと、MyModelと呼ばれるモデルと、MyModelをプロパティとして持つ静的クラスSomeDataがあります-SomeDataは、静的プロパティMyModelを持つ静的クラスです(これは私が持っているモデルクラスの型の ) と静的メソッド getdata() 、ModelClass への参照を返します

public static MyModel MyModels;

    static SomeData()
    {
        MyModels = new MyModel { SomeValue = 100 , SomeString="ComingFromSomeData"};

    }

    public static MyModel getdata()
    {
        return MyModels;
    }

以下は2つのアクションメソッドです。起動時にアクションインデックスがgetdataメソッドを呼び出してモデルをバインドし、データを見ることができますが、値を変更して保存をクリックすると、アクション「保存」に戻り、変更します渡されたプロパティ (100 を追加して "bro" を追加) を入力し、モデルを "保存" ビューに再度バインドしようとします (保存ビューは Index ビューに似ていますが、再度 Index ビューに移動する ActionLink もある点が異なります)。 、問題は、「保存」ビューで変更値を確認できないことですが、actionlink をクリックして再度インデックス ビューに移動すると、変更された値 (静的クラスに保存されている) を確認できます。

 public ActionResult Index()
    {
        MyModel M = SomeData.getdata();
        return View(M);
    }

    [HttpPost]
    public ActionResult Save(ValidationPractice.Models.MyModel M)
    {
        if (ModelState.IsValid)
        {
            SomeData.MyModels.SomeValue = M.SomeValue + 100;
            SomeData.MyModels.SomeString = M.SomeString+" bro";
        }
        MyModel whosemodel = SomeData.getdata();
        //return View("Index", whosemodel)
        return View(whosemodel);
    }

次のようにモデル化します

 public class MyModel
{
    private int _somevalue;

    [Required]
    public int SomeValue
    {
        get { return _somevalue; }
        set { _somevalue = value; }
    }
    [Required]
    public string SomeString
    {
        get;
        set;
    }

}

および次のようなインデックスビュー

@model ValidationPractice.Models.MyModel
<form action="Home\Save" method="post">
    <label>SomeLabel</label>&nbsp&nbsp
    @Html.EditorFor(model => model.SomeValue)
    @Html.EditorFor(model=>model.SomeString)

    <input type="submit" />
</form>

そして、次のように保存ビュー -

@model ValidationPractice.Models.MyModel
<form action="Home\Save">
<label>SomeLabel</label>&nbsp&nbsp
@Html.EditorFor(@model => model.SomeValue)
@Html.EditorFor(@model=>model.SomeString) <br />
@Model.SomeString
@Model.SomeValue<br />
<input type="submit" />
@Html.ActionLink("Clicktoreturn", "Index");

注意すべき点は、 @Model.SomeString 、@Model.SomeValue は 200 と ComingFromSomeDataBro である更新された値を返しますが、バインドされたモデルのラムダ式 @model=> model.SomeString は返さないということです ...なぜそれが起こっているのですか?

4

3 に答える 3

0

更新:モデルバインディングを間違った方法で使用しています:

@Html.EditorFor(@model => model.SomeValue) //
@Html.EditorFor(@model=>model.SomeString)  // What is @model...?! just model!

Svae ビューを次のように修正します。

@model ValidationPractice.Models.MyModel
<form action="Home\Save">
<label>SomeLabel</label>&nbsp&nbsp
@Html.EditorFor(model => model.SomeValue)
@Html.EditorFor(model=>model.SomeString) <br />
@Model.SomeString
@Model.SomeValue<br />
<input type="submit" />
@Html.ActionLink("Clicktoreturn", "Index");

次回は、質問に十分な関連コードを追加することを忘れないでください ;)

于 2013-07-30T06:51:37.170 に答える