0

ユーザーがビューの入力フィールドに毎回値を追加するときに、MVC モデル リスト プロパティを動的に更新するにはどうすればよいですか?

私のアプリは C# Web アプリケーションで、かみそりビューを使用しています。

したがって、私のモデルには、データ型リストのワーカーと呼ばれるプロパティがあります。

public class Factory
{
    public List<worker> workers { get; set; }

    public class worker
    {
        public string name { get; set; }
    }
}

そして、Razor ビューには次のものがあります。

@model App.Models. Factory

<div id="worker" class="form-group">
    @Html.LabelFor(m => m.workers, new { @class = "col-lg-2 control-label" })
    <div class="container">
        @Html.TextBoxFor(m => m.workers, new { placeholder = "worker name", @class="form-control", id="workerinput"})  
    </div>
</div>

入力@Html.TextBoxForには、「ワーカーの追加」という対応するボタンが必要です。そのため、ユーザーがワーカーを追加してボタンをクリックすると、ワーカーの名前がワーカーのリストに追加されます。ユーザーは複数のワーカーを追加できます。

クライアントに各名前 (たとえば 5 つの名前) を追加してから、サーバーでモデルを更新するにはどうすればよいですか?

4

2 に答える 2

0

これは単なるサンプルです。コードを少し変更する必要があるかもしれません。

<script type="text/javascript">
    var workers = new Array();
    function addWorker() {
        workers.push($("#TextToAdd").val());
    }

    function submit() {
        var postData = { names: workers };
        $.ajaxSettings.traditional = true;
        $.ajax({
            url: '@Url.Action("AddWorker", "Home")',
            type: "POST",
            dataType: 'json',
            data: postData,
            success: function () {
                alert("Added");
            }
        });
    }
</script>

ここにコントロールがあります

@Html.TextBoxFor(x => x.TextToAdd)
@Html.DropDownList("workerList", items);
<input type="button" value="addlocal" onclick="addWorker();" />
<input type="button" value="Post" onclick="submit();" />

コントローラーでは、すべてのアイテムをリストに追加し直す必要があります。お役に立てれば。

    public ActionResult AddWorker(List<string> names)
    {

        List<String> strings = new List<string>();
        if (Session["List"] != null)
        {
            strings = (List<String>)Session["List"];
        }
        foreach (var s in names)
        {
            strings.Add(s);
        }

        Session["List"] = strings;
        return Json(strings);
    }
于 2013-08-24T02:59:23.477 に答える
0

あなたが望むのは、新しいアイテムを非同期的にサーバーに投稿し、モデルを更新することのようです。これを正確に行う方法の良い例を次に示します。

http://blog.krisvandermast.com/UsingJQueryAjaxToLoadAPartialViewInASPNETMVC2AndThenRetrieveTheInputOnTheServerAgain.aspx

つまり、ユーザーが [ワーカーの追加] をクリックすると、ビューは新しいワーカーをサーバーに送信し、サーバーはワーカーの完全なリストを取得してビューに戻ります。その後、ビューを更新して、ワーカーの完全なリストを表示できます。

于 2013-08-24T02:12:01.117 に答える