繁体   English   中英

调用 JavaScript function 从 Z1848E732214CCE460F9B24FE0C28 视图中的 C# 代码

[英]Call a JavaScript function from C# code in asp.net core 5 MVC view

我正在研究针对.Net 5Asp.net core 5 MVC

我在我的一个views中有一个JavaScript function ,如果条件为true ,则应该执行此 function 。

需要明确的是:我有一个ControllerAction ,这个动作有时会返回一个 object ViewResultMessageModel

ViewResultMessageModel 定义:

    public class ViewResultMessageModel
        {
            public string                Title   { get; set; }
            public string                Message { get; set; }
            public ViewResultMessageType Type    { get; set; }
        }

**ViewResultMessageType Definition:**

    public enum ViewResultMessageType
        {
            Error,
            Success
        }

我在行动中做了什么:

     public async Task<IActionResult> Edit(PedagogicalSequenceModelVm model)
            {
                if (ModelState.IsValid)
                {
// Some logic here
                    var resultMessage = new ViewResultMessageModel() {Type = ViewResultMessageType.Success, Title = "Success", Message = "Edited"};
                    ViewBag.ResultMessage = resultMessage;
    
                    return RedirectToAction(nameof(Edit), new {id = model.Id});
                }
    
           // Some logic here
    
                return View( _model );
            }

我的 JavaScript function:

    function ShowSuccess(message,title="Succés") {
    
//Some logic here
    
    }

我试过这个:

   <script>
        $(document).ready(function () {

            if (@resultMessage !== null)
            {
                if(@resultMessage.Type === @ViewResultMessageType.Success)
                {
                    ShowSuccess(@resultMessage.Message,@resultMessage.Title);
                }
            }
    });
    </script>

resultMessage在上面的视图中定义如下:

@{
    var resultMessage = (ViewResultMessageModel) ViewBag.ResultMessage;
}

但是当@resultMessage !== null时没有执行 function 我知道我使用Js的方式不好,但是有什么方法可以检查条件,如果是True想执行ShowSuccess方法吗?

首先,您需要知道视图中的变量( resultMessage )不能是 null。 因为变量值是在页面加载时渲染的。 如果等于null, resultMessage.Type会抛出异常:

System.NullReferenceException:“对象引用未设置为 object 的实例。”

对于您的场景,function 不执行该语句的原因是,一旦页面加载,该变量将呈现该值。 为了便于理解,您可以在页面加载时看到如下脚本。 对于 js 是不可接受的,它会将它们视为变量,但您没有在 js 中定义这样的变量:

if (ViewResultMessageModel!== null)
{
    if(Sucess === Success)
    {
        ShowSuccess(Edited,Success);
    }
}

正确的方法应该是:

if('@resultMessage.Type' === '@ViewResultMessageType.Success')
{
    ShowSuccess('@resultMessage.Message','@resultMessage.Title');
}

它会在页面加载时生成js:

if('Sucess' === 'Sucess')
{
    ShowSuccess('Edited','Sucess');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM