0

部分的なビューを返す次のアクション メソッドがあります_createreturn Json(new { IsSuccess = "True" },しかし、部分ビューのように Json オブジェクトを渡す方法はありますか。

私のアクションメソッドは次のようになります:-

try
{
  if (ModelState.IsValid)
  {
     var v = repository.GetVisit(visitid);
     if (!(v.EligableToStart(User.Identity.Name)))
     { 
       return View("NotFound"); 
     }
     vlr.VisitID = visitid;
     repository.AddVisitLabResult(vlr);
     repository.Save();
     ViewBag.LabTestID = new SelectList(repository.FindAllLabTest(), "LabTestID", "Description", vlr.LabTestID);
     // return Json(new { IsSuccess = "True" }, JsonRequestBehavior.AllowGet);
     @ViewBag.status = "Added Succsfully";
     return  PartialView("_create",vlr) ;
   }
}

::-更新しました-::

私が次のようにしようとしていること:-

  1. 私はajax.beginformを使用してアクションメソッドを呼び出しています

    using (Ajax.BeginForm("CreateAll", "VisitLabResult", new AjaxOptions
    {
      HttpMethod = "Post",
      UpdateTargetId = item.ToString(),
      InsertionMode = InsertionMode.Replace,
      OnSuccess = string.Format("disableform({0})", Json.Encode(item)),
    }))
    
  2. サーバーからの応答を正常に受信した後、Onsuccess スクリプトが実行されます。スクリプトは単にフォームを無効にします:-

    function disableform(id) {
        $('#' + id + ' :input').prop("disabled", true);
    }
    

問題は、検証エラーが発生した場合でも、スクリプトが常にフォームを無効にすることです。そのため、私が達成しようとしていたのは、ModelState.IsValid が有効かどうかを示す部分ビューを含む JSON を返すことです。ユーザーが検証エラーを修正できるようにフォームを有効にしておくことは無効でした。

ブラジル

4

4 に答える 4

0

アクション メソッドから 1 つのビューのみを返すことができます。他の情報を渡したい場合は、ViewData または ViewBag を使用してください。

ViewBag.IsSuccess =  "True";

または

ViewData["IsSuccess"] = "True";
于 2012-05-03T13:42:51.213 に答える
0

いいえ、ビューのみを返し、JSON をモデルとして渡すか、ViewBag (モデルをお勧めします) を渡すことができます。

于 2012-05-03T13:43:53.903 に答える
0

プロパティを追加して、すでにビューに渡しているモデルを単純に拡張してみませんIsSuccessか?

私の意見では、ViewBag または ViewData は悪です。ビューにデータを返すときは、常に ViewModel を使用するようにしてください。

于 2012-05-03T13:50:11.077 に答える
0

そのような場合、次の解決策を使用しました。

ajax フォーム定義セットで:

OnComplete = "yourCallback"

それで:

yourCallback = function(response){
  var json = response.responseJSON;
  if(json.success){
     alert('Well done!');
  } else {
     var form = $('#formId');
     form.html(json.html);
     form.removeData("validator").removeData("unobtrusiveValidation");
     $.validator.unobtrusive.parse(form);
  }
}

コントローラーは次のようなものを返す必要があります。

var result = new { success = false, html = helper.Partial("_YourPartial", model) };
return Json(result);

部分ビューに検証を追加するのに役立ちhelperます。(ここで説明: https://stackoverflow.com/a/4270511/952023 )

于 2013-07-26T12:47:29.737 に答える