Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用javascript的ASP.Net MVC 3.0 Ajax.ActionLink动态对象路由值_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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

Asp.net mvc 使用javascript的ASP.Net MVC 3.0 Ajax.ActionLink动态对象路由值,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,0项目 在我看来,我有一个隐藏的字段,它有一个用户ID。此用户id是在操作时生成的(因此之前不会知道) 一旦这个隐藏字段有了一个值,我想将该值用作actionlink routevalue。我可以用jquery选择器来完成吗 我隐藏的领域是 <input id="NewUserID" type="hidden" value="80"> 你知道这是否可行吗?也许类似的方法会奏效。将操作链接放在div中,并在客户端使用jquery对其进行修改 <div id="ajaxTest"

0项目

在我看来,我有一个隐藏的字段,它有一个
用户ID
。此用户id是在操作时生成的(因此之前不会知道)

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

我隐藏的领域是

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

你知道这是否可行吗?

也许类似的方法会奏效。将操作链接放在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>

@ActionLink(“编辑”、“编辑用户”、“用户”,新的{UserID=“$('#GetNewPatientID').val()”,
新选择
{ 
OnSuccess=“ShowEditUserForm”,
UpdateTargetId=“EditUserDetails”,
InsertionMode=InsertionMode.Replace,
HttpMethod=“获取”
},新的{@class=“button”,id=“EditUserButton”})
$(文档).ready(函数(){
$(“#ajaxTest a”)。单击(函数(事件){
$(this.attr('href',“/EditUser/Edit?UserId=”+$(“#NewUserId).val()+”);
}); 
}); 

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

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>0的检查,因此id被初始化为-1。如果不满足此条件,将返回一个“错误”视图。

如果需要再次单击链接并传递另一个值,如何再次查找和更改该值?我觉得这是一种有点令人失望的方法,因为这是最好的方法。AJAX调用通常会消耗用户在页面上的输入,并且必须用我自己的字符串来替换()一个神奇的字符串来使用,这是很有技巧的。
$(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" }
                            )