【问题标题】:Client side value in URL.Action parameterURL.Action 参数中的客户端值
【发布时间】:2013-08-15 14:54:31
【问题描述】:

我正在尝试从模式弹出窗口中发布有关对象的反馈。弹出窗口中没有值是从服务器端填充的。

 <div class="modal fade" id="msg-editor">
        <div class="modal-header">
            <a class="close" data-dismiss="modal">&times;</a>
            <h3>Title of the form</h3>
        </div>
        <div class="modal-body">
            <div class="row-fluid">
                <div class="controls span10">
                    <label class="control-label" for="Title">Title and message</label>
                    <input type="text"
                        class="input-xlarge" id="Title" name="Title"
                        placeholder="Title of the message" />
                    <textarea class="input-xlarge" id="Message"
                        name="Message" rows="5" cols="9"
                        placeholder="Message"></textarea>

                    <label class="checkbox">
                        <input type="checkbox" value="option2" id="EmailSelf">
                        Send a copy of this message to yourself
                    </label>

                </div>
            </div>
        </div>
        <div class="modal-footer">
            <a href="#" class="btn" data-dismiss="modal">Close</a>
            <a id="Submit" class="btn btn-primary" href="@Url.Action("AddDocumentMessage", "Invoice", new { param1 =  $('#myFormSubmit').value, param2 = Model.Obj.Value1, param3 = Model.HashedValue })">Send</a>
        </div>
    </div>

不起作用的部分是

param1 = $('#myFormSubmit').value.

如何传递客户端值?

【问题讨论】:

    标签: asp.net-mvc-4 twitter-bootstrap url.action


    【解决方案1】:

    你不能……!

    因为razor代码是在服务端解析和渲染的,而在服务端,没有jquery或者任何客户端代码或者数据……

    另一种类似的工作可能如下所示:

    <div class="modal-footer">
        <a href="#" class="btn" data-dismiss="modal">Close</a>
        <input type="button" value="Send" onclick="submit()" />
    </div>
    
    <script>
        function submit() {
            $.ajax({
                url: @Url.Action("act", "con") + '?param1=' + $('#myFormSubmit').value +
                                                  '&param2=' @Model.Obj.Value1 + 
                                                  '&param3=' + @Model.HashedValue,
                type: 'POST',
                // ... other ajax options ...
            });
        }
    </script>
    

    然后,在您的操作方法中,您将收到字符串中的所有参数:

    [HttpPost]
    public ActionResult act(string param1, string param2, string param3)
        {
            ViewBag.Message = "Your contact page.";
    
            return View();
        }
    

    【讨论】:

    • 好的,那么还有其他方法可以让用户的 cmets 从模态返回到服务器吗?这当然是有可能的。
    【解决方案2】:

    您遇到的问题是 Razor 代码在服务器上执行以创建 URL,然后发送到客户端,因此在创建 URL 时客户端值是未知的。您需要在 URL 中创建一个占位符,以便在文档准备好时插入客户端值。

    所以是这样的:

    <a id="Submit" class="btn btn-primary" href="@Url.Action("AddDocumentMessage", "Invoice", new { param1 = "param1_placeholder" , param2 = Model.Obj.Value1, param3 = Model.HashedValue })">Send</a>
    
    $(function () {
    
        var url = $('#Submit').attr('href');
        $('#Submit').attr('href', url.replace('param1_placeholder', $('#myFormSubmit').value));
    
    });
    

    【讨论】:

    • 这不起作用:(。'未定义'是使用 $('#Submit').attr('href', url.replace('param1_placeholder', $ ('#Title').val())); 运行客户端函数来检查 - 文本框值在点击时可用。
    • 从服务器返回的链接标签是什么样子的?
    • 如果您需要的 URL 值在用户单击特定内容之前不可用,那么您肯定会得到一个未定义的值。我只是假设可以在文档准备好时检索该值,因为我没有其他事情要做。
    【解决方案3】:

    您可以尝试生成并附加您需要的链接:

    <div class="modal-footer">
                <a href="#" class="btn" data-dismiss="modal">Close</a>
    <div class="link"></div>
            </div>
    
    
    $(function () {
    var path ="@Url.Action("AddDocumentMessage", "Invoice",new {param2 = Model.Obj.Value1, param3 = Model.HashedValue })
    
    $('.link').append('<a id="Submit" class="btn btn-primary" href="'+path+'&param1='+$('#myFormSubmit').val()+'">Send</a>')
    
    });
    

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 2019-03-16
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多