在 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
.
,则该函数应该执行
要清楚:
我有一个Controller
的Action
这个动作有时会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');
}
我正在研究 Asp.net core 5
MVC
目标 .Net 5
。
我的 views
中有一个 JavaScript
函数,如果条件为 true
.
要清楚:
我有一个Controller
的Action
这个动作有时会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');
}