![](/img/trans.png)
[英]Debug both javascript and c# in ASP.NET Core MVC using VS Code
[英]Call a JavaScript function from C# code in asp.net core 5 MVC view
我正在研究针对.Net 5
的Asp.net core 5
MVC
。
我在我的一个views
中有一个JavaScript
function ,如果条件为true
,则应该执行此 function 。
需要明确的是:我有一个Controller
的Action
,这个动作有时会返回一个 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.