ASP.Net MVC 3.0 Значения маршрута динамического объекта Ajax.ActionLink с использованием javascript

0 Проект

На мой взгляд, у меня есть скрытая папка с UserID. Этот идентификатор пользователя генерируется при действии (так что это не будет известно ранее)

Как только это скрытое поле имеет значение, я хотел бы использовать это значение в качестве значения маршрута actionlink. Могу ли я сделать это с помощью селектора jquery.

Мое скрытое поле

<input id="NewUserID" type="hidden" value="80">

My ajax.ActionLink

@Ajax.ActionLink("Edit", "EditUser", "User", new { UserID = "$('#GetNewPatientID').val()" },
        new AjaxOptions
        {
            OnSuccess = "ShowEditUserForm",
            UpdateTargetId = "EditUserDetails",
            InsertionMode = InsertionMode.Replace,
            HttpMethod = "Get"
        }, new { @class = "button", id = "EditUserButton" }) 

Любая идея, если это возможно?

Ответ 1

При создании ссылки действия на сервере вы можете поместить некоторый специальный заполнитель для значения маршрута UserID:

@Ajax.ActionLink(
    "Edit", 
    "EditUser", 
    "User",    
    new { 
        UserID = "__userid__" 
    },
    new AjaxOptions {
        OnSuccess = "ShowEditUserForm",
        UpdateTargetId = "EditUserDetails",
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "Get"
    }, 
    new { 
        @class = "button", 
        id = "EditUserButton" 
    }
) 

а затем, когда вы назначаете значение скрытому полю в javascript, вы также можете обновить ссылку на действие href:

$('#EditUserButton').attr('href', function() {
    return this.href.replace('__userid__', $('#NewUserID').val());
});

Ответ 2

Возможно, что-то вроде этого будет работать. Поместите ссылку на действие в div и измените ее с помощью jquery на стороне клиента.

<div id="ajaxTest">
@Ajax.ActionLink("Edit", "EditUser", "User", new { UserID = "$('#GetNewPatientID').val()" }, 
        new AjaxOptions 
        { 
            OnSuccess = "ShowEditUserForm", 
            UpdateTargetId = "EditUserDetails", 
            InsertionMode = InsertionMode.Replace, 
            HttpMethod = "Get" 
        }, new { @class = "button", id = "EditUserButton" })  
</div>

<script type="text/javascript"> 
     $(document).ready(function(){ 
        $("#ajaxTest a").click(function (event) { 
            $(this).attr('href', "/EditUser/Edit?UserId='+ $('#NewUserId).val() +'"); 
     }); 
     }); 
</script>

Ответ 3

Ответ, предоставленный Дарином, велик и помог мне, однако, как говорится в комментарии, нужно ли снова нажать ссылку и передать другое значение, как вы это делаете? Это требование, если вы обновляете частичные представления и т.д. Итак, вот как я достиг именно этого...

$(document).ready(function () {
    $('#replyMessageButton').click(function () {
        var url = $("#replyMessageButton").attr("href")
        $("#replyMessageButton").attr("href", TrimToSlash(url) + $("#MessageId").val())
    });
});

function TrimToSlash(value) {

    if (value.indexOf("/") != -1) {

        while (value.substr(-1) != '/') {
            value = value.substr(0, value.length - 1);
        }
    }
    return value;
}

        @Ajax.ActionLink("Reply", "ReplyMessage", "MessageBox", new { id = -1 },
                        new AjaxOptions
                            {
                                UpdateTargetId = "replyMessageContainer",
                                InsertionMode = InsertionMode.Replace,
                                OnBegin = "UpdateDisplay('replyMessage')",
                                OnFailure = "UpdateDisplay('default')"
                            },
                            new { @id = "replyMessageButton" }
                            )

Также реализована проверка на messageId > 0 в контроллере, поэтому идентификатор инициализируется -1. "Ошибка" отображается, если это условие не выполняется.