2

因此,我有一个包含客户信息的表格,包括他们的姓名、电话、电子邮件等。我将表格设置为有一个单选按钮,可以从该表格中选择一个客户。这个单选按钮调用一个 jQuery 函数,该函数从控制器方法中获取客户的姓名。我正在寻找将 CustomerID 和 CustomerName 都传递给 CustomerEvent 控制器的正确和最佳方法,该控制器返回特定客户的事件视图。如果我尝试使用 AJAX POST,它不会返回data. 我也尝试过 window.location ,但这也不起作用。

这是剃须刀代码:

@Html.ActionLink("Events ", "../CustomerEvent/Index", null, new { id = "btnEventsCustomerID" })

jQuery:

jQuery('input[type=radio]').change(function () {
        jQuery('#hdnCustomerID').val($(this).val());            
        var CustomerID = jQuery('#hdnCustomerID').val();
        var CustomerName = null;
        $.ajax({
            url: '/Customer/GetCustomerName',
            data: { id: CustomerID },
            type: "GET",
            async: false,
            cache: false,
            success: function (data) {
                CustomerName = data
            }
        });
        alert(CustomerName);
        jQuery('#btnEventsCustomerID').click(function () {
            window.location = "/CustomerEvent/Index/?CustomerID=" + CustomerID + "&CustomerName=" + CustomerName;             
        });

CustomerName 警报运行正常。这是我返回客户事件视图的控制器方法:

public ActionResult Index(int CustomerID = 0, string CustomerName="")
    {            
        if (CustomerID != 0)
        {                
            Session["CustomerID"] = CustomerID;               
            Customer CustomerObj = _customer.GetCustomer(CustomerID);
            Session["CustomerName"] = CustomerObj.FirstName + " "+ CustomerObj.LastName;
        }
        return View(_customerEvent.GetCustomerEventCustomList(CustomerID));            
    } 
4

2 回答 2

1

我面前没有编辑,但我会试一试。听起来这里有几个不同的问题,所以我会尝试同时解决它们。

要将客户名称存储在 YD1m 建议的数据属性中,您可以这样做:

@Html.ActionLink("Events ", "../CustomerEvent/Index", null, new { id = "btnEventsCustomerID, data_customer_name = "customernamehere" })

以下是有关数据属性的更多信息:http: //ejohn.org/blog/html-5-data-attributes/

至于 ajaxically 从您的 CustomerEvent 控制器返回您的视图,我要做的是使用 jQuery 的“加载”功能。我会首先让您的操作返回 PartialView(不是完全必要,但我更喜欢准确)。然后,在您的客户端脚本中:

jQuery('input[type=radio]').change(function () {

    jQuery('#hdnCustomerID').val($(this).val());            

    var CustomerID = jQuery('#hdnCustomerID').val();
    var CustomerName = jQuery('#hdnCustomerID').attr('data-customer-name');

    $("#SOME_CONTAINER_FOR_THE_VIEW").load('/Customer/GetCustomerName?customerId=' + CustomerID + '&customerName=' + CustomerName, function(){ alert('done')});

更多关于 jQuery 的 .load() 函数在这里:http ://api.jquery.com/load/

于 2013-08-02T15:47:30.173 回答
1

你为什么要发送 CustomerName 呢?看起来您没有在控制器方法中使用它,因为您关闭了 ID 并在 CustomerObj 中获取了客户详细信息(包括名称)。如果可以,请简化并删减它...

您有两种有效地从同一链接调用同一控制器方法的方法,一种在操作链接中,当前将 null 传递给该方法,而 .click() 在您的 jQuery 中覆盖,它实际上试图传递方法参数,问题是,两者都是对接的

由于您使用的是操作链接,因此实际上传递了路由值(最初为 null 的位置),因此进行修改,您应该一切顺利(并摆脱 jQuery 单击覆盖,因为看起来您正在有效地将用户移动到新视图) :

    @Html.ActionLink("Events ", "../CustomerEvent/Index", 
         new{CustomerID = model.CustomerID}, new { id = "btnEventsCustomerID" })

只是model.CustomerID相对于您在视图中引用模型数据进行更改

于 2013-08-02T17:27:19.840 回答