0

私は次のビュー部分を持っています:

<div class="editor-label">
    @Html.LabelFor(model => model.Type)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Type, ElangWeb.Helpers.ModelHelpers.GetExerciseTypes())
</div>

列挙型であるモデルのTypeプロパティに基づいて部分ビューを生成するリンクが必要です(タイプに基づいて異なる部分ビューを返します)。次のリンクを追加しました。

@Ajax.ActionLink("AddExerciseItem", 
                        "AddExerciseItem",
                        "Exercise",
                        new { type=@Model.Type},
                        new AjaxOptions() { HttpMethod="GET", InsertionMode = InsertionMode.InsertBefore, UpdateTargetId="ExerciseItems"})

私のコントローラーアクションは次のように定義されています。

public ActionResult AddExerciseItem(ExerciseType type)
{

  return PartialView("ExerciseItemOption", new ExerciseItemOption());
}

ただし、モデルに「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外があるため、機能しません。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

通常のリンクを使用できます。

@Html.ActionLink(
    "AddExerciseItem", 
    "AddExerciseItem", 
    "Exercise", 
    null, 
    new { id = "add" }
)

目立たないようにAJAXifyできること:

// When the DOM is ready
$(function() {
    // Subscribe to the click event of the anchor
    $('#add').click(function() {
        // When the anchor is clicked get the currently
        // selected type from the dropdown list.
        var type = $('#Type').val();

        // and send an AJAX request to the controller action that 
        // this link is pointing to:
        $.ajax({
            url: this.href,
            type: 'GET',
            // and include the type as query string parameter
            data: { type: type },
            // and make sure that you disable the cache because some
            // browsers might cache GET requests
            cache: false,
            success: function(result) {
                // When the AJAX request succeeds prepend the resulting
                // markup to the DOM the same way you were doing in your
                // AJAX.ActionLink
                $('#ExerciseItems').prepend(result);
            }
        });
        return false;
    });
});

これで、AddExerciseItemコントローラーアクションはタイプパラメーターを受け取ることができます。

public ActionResult AddExerciseItem(string type)
{
    ...
}
于 2013-01-25T12:12:48.920 に答える