2

こんにちは、私は MVC の初心者で、現在 MVC 3 と Entity Framework 4.1 を使用して小規模な人事システムを実装しようとしています。現在、私は、最近病気で仕事を休んだ従業員をリストするテーブルを表示するという非常に些細なタスクのように思えることに行き詰まっています。各テーブルの行には、従業員が病気を提供したかどうかをユーザーがチェックするチェックボックスがあります。シート。また、クリックするとコントローラーメソッドへの呼び出しを呼び出し、チェックボックスのチェックされた値を病気休暇アプリケーションのIDとともに渡すボタン/リンク/などを各行に配置したいと考えています。アクションリンクを使用してみましたが、チェックボックスのチェックされた値を意味するルート値として入力するものにちょっと困惑しています。これと同じ機能を Web フォームで実行するのに数分しかかかりませんが、私が言ったように、MVCは初めてで、これは非常に単純なタスクのように見えるため、おそらくどこかに非常に単純な解決策があると思われますが、私の人生ではそれを理解することはできません. 私が推測している何かがあれば、これには少しのjquery(ところで、私にはまだ外国語のように見えることがあります)と隠しフィールドが必要かもしれませんか?うーん、わからない。誰かが私を助けてくれませんか?? 前もって感謝します。

これが私の見解です:

    @model IEnumerable<LeaveSoft.Models.PendingSickLeave>

   <table>
    <tr>


     <th>
        Applicant's Name
    </th>

    <th>
        Leave Start
    </th>
    <th>
        Leave End
    </th>
    <th>
        Number Of Days
    </th>     

    <th>
        Reason
    </th>

    <th>
        Confirm
    </th>
    <th>

    </th>
</tr>

   @foreach (var item in Model) {
<tr>


    <td>
        @Html.DisplayFor(modelItem => item.UserFullName)
    </td>

    <td>
        @Html.DisplayFor(modelItem => item.StartDate)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.EndDate)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.NumOfDays)
    </td>


    <td>
        @Html.DisplayFor(modelItem => item.LeaveReason)
    </td>

    <td>
       @Html.CheckBox("chkConfirm")


            @Html.Label("", "Sick Sheet Provided")

    </td>

    <td>
       @Html.ActionLink("Process", "ProcessSickLeave", new { id = item.ApplicationID, sicksheet = "THIS IS THE PART I DON'T KNOW" }) 

    </td>    
</tr>
  }

</table>
4

1 に答える 1

0

これが私の頭の上からの簡単な解決策です(私の怠惰のために表が短縮されています):

HTML/かみそり:

<table>
    <tr>
        <th>ApplicantName</th>
        <th>Confirm</th>
        <th></th>
    </tr>
    @foreach (var item in Model.PendingSickLeave) // this is a List<>
    {
    <tr>
        <td>@item.UserFullName</td>
        <td>@Html.CheckBoxFor(m => item.SickSheet, new { @id = "chk" + @item.ApplicationID })</td>
        <td>@Html.ActionLink("Process", "ProcessSickLeave", new { id = item.ApplicationID }, new { @class="submit", @data_val = item.ApplicationID })</td>    
    </tr>
    }
</table>

JQUERY スクリプト:

<script>
    $(function () {
            // captures click event. appends the sicksheet querystring on the url.
        $('a.submit').click(function (e) {
            e.preventDefault();
            var id = $(this).attr('data-val');
            var chk = $('#chk' + id);
            if ($(chk).is(':checked'))
                $(this).attr('href', $(this).attr('href') + '?sicksheet=true');
            else
                $(this).attr('href', $(this).attr('href') + '?sicksheet=false');
        });

    });
</script>

基本的に、Process アクションリンクをクリックすると、jquery は ID が一致するチェックボックスを探し、チェックされている場合は、?sicksheet=true続行する前に URL の末尾に a を追加します。

編集:

ルート:

routes.MapRoute("ProcessSickLeave", "process/processsickleave/{applicationid}", 
                  new { controller = "Process", action = "ProcessSickLeave" }); 

コントローラー:

    public ActionResult ProcessSickLeave(ProcessViewModel m)
    {
        return Content("ID = " + m.ApplicationID + 
                  "<br/> Has Sick sheet: " + m.SickSheet.ToString(), "text/html");
    }
于 2012-07-11T01:23:22.203 に答える