1

ユーザーの詳細を含むビューに Html.BeginForm があります: 名、姓、電子メールなど。その後、2 つのボタンがあります。承認と却下

承認をクリックすると、1 つのビューに移動します。

拒否すると、別の場所に行きます。

どちらがクリックされたかを処理する最良の方法は何ですか?

私からしてみれば:

<% using (Html.BeginForm("PublishGroupsForRecommendedUser", "Recommend", FormMethod.Post, new { id = ViewBag.UserId }))
  { %>
   <div class="section _100">
    <%: Html.LabelFor(model => model.Email)%> 
    <div>                                      
      <%: Html.EditorFor(model => model.Email)%>  
      <%: Html.ValidationMessageFor(model => model.Email)%>    
    </div>
   </div>            

   //etc

 <input type="hidden" name="action">
 <div class="actions">
  <div class="actions-right">
    <input type="submit" value="Approve" class="submit_button" />
  </div>
  <div class="actions-left"> 
    <input type="submit" value="Reject" class="submit_button" />
  </div>
  </div>
  <% } %>

私のコントローラーで:

   [HttpPost]
  public ActionResult PublishGroupsForRecommendedUser(int userId)
  {
    var recommendedUser = ZincService.UserService.GetRecommendedUserForId(userId);
    var visibleGroups = ZincContext.CurrentUserGroups.Get();
    var groupEntities = ZincService.GroupService.GetVisibleGroupsForUser(CurrentUser.UserId).ToList();

    var viewModel = GetGroupPublishingViewModelForSelectedGroups(
    recommendedUser.RecommendedUserId, Zinc.Enums.PublishingMode.ParticipatingGroupUsersOnly,
    recommendedUser.Email, groupEntities);

    return View(viewModel);
  }


  [HttpGet]
  public ActionResult RejectUser(RecommendUserViewModel model)
  {
    Entities.RecommendedUser user = new RecommendedUser();
    user.ReasonForRejection = model.ReasonForRejection;
    ZincService.UserService.UpdateRecommendedUser(user);
    return View(user);
  }

(Html.BeginForm("PublishGroupsForRecommendedUser", "Recommend", FormMethod.Post, new { id = ViewBag.UserId }))そのため、どのボタンがクリックされたかに応じて、対応するビューを呼び出すPublishGroupsForRecommendedUserorアクションに移動する必要があるため、行 using はもう使用できません。RejectUser

誰かが私に最善の方法を勧めてくれますか?

4

3 に答える 3

0

jquery を使用する場合、1 つの解決策は次のようになります。

フォームに ID を指定し、要素の両方の送信ボタンのアクション URL をデータ属性として設定します。

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "my-form" }))
{
    //form elements

    <input type="submit" name="action" value="Approve" data-action="@Url.Action("Approve", "YourController")" />
    <input type="submit" name="action" value="Reject" data-action="@Url.Action("Reject", "YourController")"/>
}

次に、送信ボタンのクリックイベントをjqueryで添付し、アクションをフォームに添付します。

$(function () {
    $('#my-form :submit').click(function (e) {
        var button = $(this);
        button.closest('form').attr('action', button.attr('data-action'));
    });
});

お役に立てれば。

于 2013-05-02T15:32:16.173 に答える
0

私からしてみれば:

<asp:Content ID="Content2" ContentPlaceHolderID="ScriptPlaceHolder" runat="server">

<script type="text/javascript">
 function RejectUser(userId) {
   $.ajax({
     url: '<%= Url.Action("RejectUser", "Recommend") %>',
     type: 'GET',
     dataType: 'json',
     data: { id: userId, reasonForRejection: $('#textarea').val() },
     success: function (data) {
       window.location.href = data.redirectTo;
     }
    });
 }
</script>

</asp:Content>

<div class="actions">
   <div class="actions-right">
      <input type="submit" value="Approve" class="submit_button" />
   </div>
   <div class="actions-left">      
      <a href="javascript:RejectUser(<%: Model.RecommendedUserId %>);" class="button" id="submit_button">Reject</a>
   </div>
</div>

そしてコントローラーで:

   [HttpGet]
  public JsonResult RejectUser(int id, string reasonForRejection)
  {
    if (!String.IsNullOrWhiteSpace(reasonForRejection))
    {
      Entities.RecommendedUser user = new RecommendedUser();
      user = ZincService.UserService.GetRecommendedUserForId(id);
      user.ReasonForRejection = reasonForRejection;
      ZincService.UserService.UpdateRecommendedUser(user);
      ZincService.SaveChanges();
    }
    return Json(new
    {
      redirectTo = Url.Action("RecommendedUsers"),
    }, JsonRequestBehavior.AllowGet);
  }

皆さんありがとう!

于 2013-05-06T11:02:12.083 に答える