使用javascript的ASP.Net MVC 3.0 Ajax.ActionLink动态对象路由值

时间:2011-11-17 19:33:33

标签: asp.net-mvc asp.net-mvc-3

0项目

在我看来,我有一个隐藏的文件,其中有一个UserID。该用户ID是在动作时生成的(因此事先不知道)

一旦这个隐藏字段有值,我想将该值用作actionlink routevalue。我可以使用jquery选择器吗。

我的隐藏字段是

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

我的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" }) 

知道这是否可行?

3 个答案:

答案 0 :(得分:12)

在服务器上生成操作链接时,您可以为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());
});

答案 1 :(得分:7)

也许这样的事情会起作用。将操作链接放在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>

答案 2 :(得分:1)

Darin提供的答案很棒并且帮助了我,但是如评论所示,如果您需要再次点击链接并传递不同的值,那么您如何做到这一点?如果您要更新部分视图等,这是一个要求。所以这就是我如何实现这一目标......

$(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&gt;的检查。控制器中为0,因此id初始化为-1的原因。如果不满足此条件,则返回“错误”视图。