0

私は MVC プロジェクトに参加しており、現在、多対多のマッピングに悩まされています。

私は多対多の関係を持っています。大学での学生のコース選択をモデル化しています。学生には科目があり、指定された学期には科目の完全なリストがあります。

必要: 学生がページにアクセスできるフォームを作成し、チェック ボックスを使用していくつかの科目を選択します。

View Modle を作成しました (少なくとも私はそれを呼んでいます)。ビュー「編集」で使用されるモデルです。

Edit.cshtml

//in the Edit View
@model StudentViewModel

//Some more code
@Html.EditorFor(model => model.Std.Name)
//etc..

学生ビューモデル

class StudentViewModel
{
public Student Std { get; set; }
public List<SubjectsSelection> Subs{ get; set; }
}

class SubjectSelection
{
public string Name { get; set; }
public int ID { get; set; }
public bool Selected { get; set; }
}

私が望むのは、チェックされるすべてのサブジェクトごとに一連のチェックボックスを追加することSelected = trueです。

for手動でループを介してチェックボックスのリストを作成することを計画していました。

@Html.EditorFor(model => model.Subs)フォームが送信されたときにこのようなコントローラーを使用できるように、似たようなことでこれを行うことはできますか

[HttpPost]
public ActionResult Edit(Machine machine, SubjectSelection[] subs)
{
//Some code here
}

その後、必要な接続を確立し (少なくともうまくいけば)、データベースに保存できるようになります。

4

1 に答える 1

0

サンプル データをコントローラーにポストする方法を示す方法

かみそりコード:

<div id="form">
        <table width="600">
            <tr>
                <td>Select Date:</td>
                <td>
                    <input class="txtDate" type="date" size="20"></td>
            </tr>
            <tr>
                <td>Select Expense Type:</td>
                <td>
                    <select class="ExpenseType">
                        <optgroup label="Room">
                            <option>Room Fare</option>
                        </optgroup>

                        <optgroup label="Mess">
                            <option>Monthly Mess</option>
                        </optgroup>

                        <optgroup label="Others">
                            <option>Bus Fare</option>
                            <option>Tapari</option>
                            <option>Mobile Recharge</option>
                            <option>Auto</option>
                        </optgroup>
                    </select></td>
            </tr>
            <tr>
                <td>Enter Cost:</td>
                <td>
                    <input  class="cost" type="text" size="45" /></td>
            </tr>
            <tr>
                <td>Extra Details:</td>
                <td>
                    <input class="extra" type="text" size="45" /></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <button href="javascript:void(0);" onClick="saveExpense();" >Submit</button></td>
            </tr>
        </table>
    </div>

<script>
function saveExpense()
    {
        var expenseobject = {          //MyModel Expense has these fields
            date:$('.txtDate').val() ,
            type:$('.ExpenseType').val() ,
            cost: $('.cost').val(),
            extra:$('.extra').val()

        };

        $.ajax({
            url: './saveexpense',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ obj: expenseobject }),
            success: function (result) {
                handleData(result);

            }
        });

    }
</script>

コントローラ:

 public ActionResult SaveExpense(Expense obj)
        {
            obj.ExpenseId = Guid.NewGuid();
            if (ModelState.IsValid)
            {
                context.expenses.Add(obj);
                context.SaveChanges();
                int total=context.expenses.Sum(x => x.cost);
                return Json(new {spent=total,status="Saved" });

            }
            else
                return Json(new { status="Error"});   
        }

のオブジェクトを作成する代わりにModel、次のことができます。

jqueryを使用してフォームを直接serialize()送信し、データをコントローラーに投稿できます...これで完了です

于 2012-12-13T11:29:51.360 に答える