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. "Ошибка" отображается, если это условие не выполняется.