【问题标题】:call a c# functions in cshtml when Ajax.BeginForm completed当 Ajax.BeginForm 完成时在 cshtml 中调用 c# 函数
【发布时间】:2020-01-21 09:37:34
【问题描述】:

所以有一个调用 PartialView 的 Ajax.BeginForm 并返回一个视图(我用它来过滤产品)

但我也想更改主视图Model

我的意思是在 Ajax.BeginForm 完成之后 我想在 PartiaView 动作中制作 ViewBag

之后,当 Ajax.BeginForm 完成时 然后在cshtml中调用一个函数来更新主视图模型 用那个ViewBag

我该怎么做

最后这是我的目标:

@functions{
public void ChangeModel(){
    Model.Prod = ViewBag.Prod //forget about the casting !
}
}

@using (Ajax.BeginForm("GetStations", "Trains", new { area = "Site" }, new AjaxOptions
{
    OnSuccess = ChangeModel(),
}, null))

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    OnSuccess 是一个 JavaScript 回调函数,

    C# 代码将是

    @using (Ajax.BeginForm("GetStations", "Trains", new { area = "Site" }, new AjaxOptions
    {
        OnSuccess = 'mySuccessCallback',
    }, null))
    

    您的控制器将返回类似这样的内容

    return Json(new { Prod = ViewBag.Prod, ... }, JsonRequestBehavior.AllowGet);
    

    JavaScript 将是

    function mySuccessCallback(data, status, xhr) {
        var newProdValue = data.Prod; // passed as model from backend
    
        // ... display the new value anywhere with JS or jQuery
    }
    

    【讨论】:

    • 没有动作返回 partialview 我想用 viewbag 得到它
    • 没问题用 javascript 查看它,如下所示:function mySuccessCallback(data, status, xhr) { var newHTML = data; $('#myDiv').html(newHTML); }
    • 我想用 viewbag 获取它并在 view Model 中设置它,我不想显示任何东西
    • 你不能用 ViewBag 来做这个你可以用 TempData 来做这个
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多