【问题标题】:MVC passing data from model to viewMVC 将数据从模型传递到视图
【发布时间】:2016-09-19 05:21:33
【问题描述】:

实际上我有一个控制器动作,它从模型中的函数中获取变量“结果”的值。动作如下。

if (model.buildingID == 0)
{
    var result = objAddBuildingBusinessModel.AddBuilding(model, connectionstring,isUnique);                       
}
else
{
    var result = objAddBuildingBusinessModel.UpdateBuilding(model, connectionstring);
}

所以现在基于变量“result”的值,如果变量“result”的值为假,我必须在视图中显示错误消息。我应该在哪里显示它以及我应该如何做。请帮助我,因为我是 MVC 新手

【问题讨论】:

  • 来自 javascript 或 html div 的错误消息?
  • 使用javascript。
  • 一种快速的方法是使用 ViewBag(即 ViewBag.result = result,确保结果在范围内)。然后在视图中添加 @ViewBag.result 以显示值。

标签: c# asp.net asp.net-mvc razor


【解决方案1】:

viewbag 中存储 result 输出并在视图侧检查 viewbag 值并显示错误消息:

注意: ViewBag 将保存您的变量以用于单次查看请求

控制器:

ViewBag.Result=result;

查看:

@if(ViewBag.Result)
{
    //Eroor Message HTML
}

JQuery/Javascript:

$(document).ready(function () {
    if (String('@ViewBag.Result').toUpperCase() == "TRUE")
    {
        alert('Error Message');
    }
});

【讨论】:

    【解决方案2】:

    我认为,您可以创建一个模型来保留相同的信息,然后发送您的数据以查看任何传输方法并显示异常。

    枚举类

    创建类枚举定义。您可以在此类上使用所有枚举 里面。在命名空间中写入所有枚举。你可以访问这个 OperationEnum.FAILOperationEnum.SUCCESS

        [Obsolete("Dont Use", true)]
        internal static class EnumDefinitions
        {
           // dont use this.
        }
    
    
        /// <summary>
        /// Operation Enums
        /// </summary>
        public enum OperationEnum
        {
            FAIL = 0,
            SUCCESS = 1,
        }
    

    创建模型

    public class OperationResult
    {
        /// <summary>
        /// Operation fail code
        /// </summary>
        public static string FAIL = "0";
    
        /// <summary>
        /// Operation success code
        /// </summary>
        public static string SUCCESS = "1";
    
        /// <summary>
        /// 1 : Success
        /// 0 : Fail 
        /// Maybe you can use Enum to set ResultCode.
        /// </summary>        
        public string ResultCode { get; set; }
    
        /// <summary>
        /// Exception message
        /// </summary>         
        public string ResultMessage { get; set; }
    
    
    }
    

    捕获异常

    在 try catch 块中使用代码并捕获异常。使用任何数据传输方法( ViewBag 、 vs vs )或使用 jsonResult 发送数据以查看

     OperationResult resultData = new OperationResult();
    
        try
        {
          if (model.buildingID == 0)
          {
            var result = objAddBuildingBusinessModel.AddBuilding(model, connectionstring,isUnique);                       
          }
          else
          {
            var result = objAddBuildingBusinessModel.UpdateBuilding(model, connectionstring);
          }
          //resultData.ResultCode = OperationResult.SUCCESS;
          resultData.ResultCode = (int)OperationEnum.SUCCESS;
          resultData.ResultMessage = "Opetaion Success";
        }
        catch(Exception ex)
        {
           //resultData.ResultCode = OperationResult.FAIL;
           resultData.ResultCode = (int)OperationEnum.FAIL;
           resultData.ResultMessage = ex.Message;
        }
       // return resultData on viewBag or andy transafer data to view 
        ViewBag.ResultData = resultData;
    

    显示异常

    获取操作值到 Enum 的最佳实践(成功或失败) 如果使用枚举值,您可以使用硬编码或使用枚举值作为示例 这样你就可以通过两边相同的枚举值达到

    if ('@ViewBag.ResultData.ResultCode' ==  '@(int)OperationEnum.FAIL') // or "2"
    {
        var exMessage = '@ViewBag.ResultData.ResultMessage';
        alert(exMessage );
    }
    

    【讨论】:

    • 但是我该如何在枚举的帮助下做到这一点.. OperationResult.SUCCESS 是什么意思?能否请您详细说明。
    • 我更新了答案。我在OperationResult类中使用操作属性你可以这样使用,或者如果使用枚举值,则使用枚举值,这样你就可以通过两边相同的枚举值到达
    • 我添加了枚举类
    • 好的,很好.. 但我是否也应该在视图中包含该模型。 OperationResult 模型?如果有怎么办。我对这些概念很陌生。请帮忙
    • 如果您访问 cshtml 中的任何模型,您可以使用 YourNameSpace 或 @ using YourNameSpace.Folder 将模型名称空间添加到 cshtml 的首页。
    【解决方案3】:

    第一次使用 Viewbag

     ViewBag.ans = "result";
    

    然后在模型部分

      @model IEnumerable<MVCApp.Models.ModelName>
    <b>Result:</b> @ViewBag.ans<br />
    

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多