在 asp.net 核心 5 MVC 视图中从 C# 代码调用 JavaScript 函数

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

我正在研究 Asp.net core 5 MVC 目标 .Net 5

我的 views 中有一个 JavaScript 函数,如果条件为 true.

,则该函数应该执行

要清楚: 我有一个ControllerAction这个动作有时会return一个对象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 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 时函数不执行 我知道我使用 Js 的方式不好,但是请问有什么方法可以检查条件,如果是 True 想执行 ShowSuccess 方法 ??

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

System.NullReferenceException: 'Object reference not set to an instance of an object.'

对于你的场景,函数不执行语句的原因是一旦页面加载变量将呈现值。为了便于理解,您可以在页面加载时看到如下脚本。 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');
}