1

これが私の強く型付けされたビューです

@using ( Html.BeginForm("Index", "Home",null, FormMethod.Post, new { id="FormPost" }))
{ 
    @Html.TextBoxFor(x => x.Name)  @Html.ValidationMessageFor(x => x.Name) 
        <br />
    @Html.TextBoxFor(x => x.LastName) @Html.ValidationMessageFor(x => x.LastName) 
        <br />
    @Html.TextBoxFor(x => x.Age)  @Html.ValidationMessageFor(x => x.Age) 
        <br />

    <input type=submit   value="submit" />
    <br /><br />    
 }

これはビュー モデル クラスです。

public class MyViewModel
{
    [Required(ErrorMessage="Please enter first name") ]
    public string Name { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public int Age { get; set; }
}

以下のスクリプトを使用して、フォームを Index アクション メソッドにポストします。

ReusableJqueryPost.prototype.CommonPost = function (formId) {

        var fid = $("#" + formId);
        var validated = $(fid).valid();
        if (validated) {
            $.ajax({
                type: 'POST',
                url: $(fid).attr('action'),
                data: $(fid).serialize(),
                accept: 'application/json',
                error: function (xhr, status, error) {

                    alert('error: ' + xhr.responseText + '-' + error);
                },
                success: function (response) {
                    alert('DATA SAVED!');
                    var resp = response;    
                }
            });
        }
};

Index Action メソッドがActionResultとして返されるようになりました

return View(objMyViewModel);

または as またはJsonResult

return Json(objMyViewModel);

jquery ポストを使用しておらず、データを ActionResult として返す場合、クライアントで何もする必要はありません。Asp.net MVC は、値を適切なテキスト ボックスにバインドします。@Html.TextBoxFor(....)

jquery ポストを使用してアクション メソッドにポストし、データをJsonResultHtml.TextBoxFor(...)として返すため、jquery を使用してテキスト ボックスまたは選択ボックスを見つけるのではなく、json 文字列の各要素をそれぞれのテキスト ボックスに自動バインドするという同じ柔軟性が必要です。 (存在する場合) を作成し、json 文字列で受け取った値に基づいてデータをバインドします。

質問

  1. これは、すぐに使用できるasp.net mvcの一部の機能で可能ですか?
  2. jqueryを使用してテキストボックスまたはドロップダウンまたはその他の入力要素を名前/ IDで検索し、json文字列から値を割り当てる唯一のオプションです
  3. ビューごとにプロジェクト全体で繰り返さずに同じコードを再利用できるように、この割り当てを一度記述する方法はありますか? プロジェクト全体で使用する jquery post メソッドが 1 つあるのと同じように。

ありがとう

4

2 に答える 2

1

以下の手順に従って、期待どおりの結果を得ることができます

  1. アクションに ajax 呼び出しを行う
  2. 次に、アクションから部分ビューを文字列として返します
  3. 次にjqueryを使用してコンテナを結果に置き換えます

例:

Jquery POST :

$.ajax({
    type: "POST",
    url: "Controller/Action", // URL
    data: {}, // Your data
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (result) {
        $("#result").replaceWith(result); // "#result" is your container which you want to replace for eg: div
    },
    error: function () {
    }
});

アクション:

    [HttpPost]
    public JsonResult Insert(TypeName model)
    {
        return Json((RenderRazorViewToString("PartialViewName", UpdatedModel)), JsonRequestBehavior.AllowGet);
    }

ビューを文字列としてレンダリング:

    [NonAction]
    public string RenderRazorViewToString(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }
于 2013-09-11T06:04:00.610 に答える
0

チェックアウト @Ajax.BeginForm- 私はそれがあなたが求めていることをすると思います.

于 2013-09-11T04:50:16.627 に答える