0

私は非常に複雑なモデルを持っています。フローは次のようになります: - コントローラーで、データベースからモデルを取り込みます - ビューには、いくつかのタブがあります。最初のタブに情報を入力すると、2 番目のタブが有効になり (これは問題なく動作します)、2 番目のタブ ボタンをクリックすると、モデルのプロパティを更新する必要があります。コントローラーにモデルを設定するために、データベースを再度呼び出さずにこれを行うにはどうすればよいですか? モデルは非常に複雑なので、すべてのプロパティを「非表示」として保存することはできません。

十分に明確にできたことを願っています。あらゆる種類の助けをありがとう

4

2 に答える 2

0

ASP.NET MVC でも同じ状況がありました。ViewBag を使用して非常に魔法のような方法でデータを送信し、Javascript 文字列を作成して Html.Raw で実行し、多くの場所で .executeSql を使用し、実際の魔法を実行しました。しかし、結局のところ、私は自問自答しました。

十分な時間がなくても (つまり、これを意味します!)、回避策の暗い海に飛び込む前に、いくつかの優れたドキュメントを読み、いくつかのチュートリアルを試すことを強くお勧めします。

忘れないでください、優れた設計と Model クラスの機能を適切に使用することで、回避策をあまり必要とせず、何よりも幸福を得ることができます。

あなたの状況のた​​めに; 最適な場所は、次のようなヘルパー クラスを作成することです。

public abstract class Helper<T> : WebViewPage<T>
{
    private dbContext db = new dbContext();

    public virtual whatEver yourUpdateOperation(int? id, string data)
    {
        // you can do your update operations here
        return whatEver;
    }
}

このクラスをすべての Web ページに適用するには、Views ディレクトリの web.config ファイルの行を変更します。

<pages pageBaseType="YourProject.HelperDirectory.Helper">

これからは、次のようなビューから yourUpdateOperation を呼び出すことができます。

@foreach (var item in Model)
{
<tr>
    <td>
    <!-- View or operate things-->
    </td>
    @yourUpdateOperation(item.ID, data)
</tr>
}

お役に立てれば。

于 2013-01-14T21:43:09.310 に答える
0

モデルを模倣する JSON オブジェクトを使用し、ユーザーが別のタブなどをクリックしたときに更新します。クライアント側の更新/操作が完了したら、AJAX を使用して JSON オブジェクトをコントローラーに送信します。ボタンクリックでこれを行う方法は次のとおりです(クリックされたものに変更できます):

    <script src="../../Scripts/json2.js" type="text/javascript"></script>
    <input type="button" value="Partially Update my Model" onclick="UpdateYourModel()" />
        <input type="button" value="Save to Database" onclick="SaveToDataBase"/>
        <script type="text/javascript">
            // Create YourModel Json Object including child objects in it.
             var childObject={"ChildId": "","ChildDescription":""};
//The array name (childObjects) should match the collection name in your actual Model
            var yourModel= { "ModelId": "", "Description": "","childObjects[]":""  }; 


        function UpdateYourModel() {
        //update the childObject first
          childObject.ChildId=1;//any value from anywhere
          childObject.ChildDescription="any value";

        // Update the model
           yourModel.ModelId= $("#ModelId").val();
           yourModel.Description="This property was changed at client side";
           yourModel.childObjects.push(childObject);//add child object to yourModel

        //Likewise, update other properties of yourModel

        }//function ends here

        function SaveToDataBase()
        {
        $.ajax({
                    url: "URL to your controller",
                    data: JSON.stringify(yourModel),
                    type: 'POST',
                    contentType: 'application/json;',
                    dataType: 'json',
                    success: function (result) {
                     alert("Success");

                    }
                });
        }
        </script>
于 2013-01-14T23:47:43.580 に答える