MVC模型只有一个JSON属性

mefy6pfw  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在研究如何将常规的MVC模型发送到常规的MVC视图,在模型中只有一个JSON字符串属性。我有一个衬衫模特

public class Shirt
{
[StringLength(120)]
public string Name { get; set; }

public string ShirtAvailbality { get; set; }
}

字符串
所以,正则模型中,没有一个JsonResult而只有ShirtAvailbality字符串作为JSON数组的对象。它应该包含颜色和尺寸可用性的信息。
在客户端上,我将有一些JQuery / JavaScript代码,如果没有颜色/大小组合,我将禁用购买按钮。例如,蓝色衬衫有所有尺寸可供选择,除了加大码。
答案对我来说很容易,但我从来没有尝试过,我想看看我的知识中是否有一些基本的遗漏。像是有可能?- 谢谢-谢谢
试图研究,但似乎是非常罕见的问题。

jucafojl

jucafojl1#

又是我似乎没人能回答。所以,经过几次实验,我得到了一些工作。
我的衬衫模型简化

public class ShirtWithJasonStringVM
{

    public string ShirtName { get; set; }

    public string ShirtAvailablityJson { get; set; }
}

字符串
要序列化的C#模型/对象

public class ShirtAvalabilityVM
{
    public int ShirtId { get; set; }

    public int ColorId { get; set; }

    public int SizeId { get; set; }

    public bool IsAvailable { get; set; }
}


将常规模型返回到常规视图的Action方法

[HttpGet]
public IActionResult JsonTest()
{
 // model / object to be serialized
 ShirtAvalabilityVM shirtAvalabilityVM = new ShirtAvalabilityVM();
 shirtAvalabilityVM.ShirtId = 21;
 shirtAvalabilityVM.ColorId = 1;
 shirtAvalabilityVM.SizeId = 1;
 shirtAvalabilityVM.IsAvailable = true;

 ShirtWithJasonStringVM shirtWithJasonStringVM = new ShirtWithJasonStringVM();
 shirtWithJasonStringVM.ShirtName = "WhatEver";
 shirtWithJasonStringVM.ShirtAvailablityJson = JsonSerializer.Serialize<ShirtAvalabilityVM>(shirtAvalabilityVM);

  return View(shirtWithJasonStringVM);
}


JsonTest视图

@model GStore.Models.ViewModels.ShirtWithJasonStringVM

@{
    ViewData["Title"] = "JsonTest";
 }

<h4>@Model.ShirtName</h4>

<script type="text/javascript">

    let tempVar = @Html.Raw(@Model.ShirtAvailablityJson);

    tempVar = JSON.stringify(tempVar)

    let someVar = JSON.parse(tempVar);

    console.log(someVar);

</script>


需要@Html.Raw来获取不编码的字符串。stringify看起来是多余的,但它是为了避免JavaScript错误。
未捕获的SyntaxError:“[object Object]”在JSON.parse()中不是有效的JSON
这是迄今为止我唯一能找到的治疗方法。
所以在控制台里我可以看到那个物体。我现在将继续尝试获取ShirtAvalabilityVM的列表,并将它们作为对象数组推送到JavaScript中。
所以仍然困惑-这种方法是正确的,任何基本问题???谢谢。
补充:我找到了一种方法,可以在控制器端对ShirtAvalabilityVM列表进行JSON字符串化。
下面是代码

shirtWithJasonStringVM.ShirtAvailablityJson =
JsonSerializer.Serialize<List<ShirtAvalabilityVM>>(listShirtAvalabilityVM);


我认为使命完成了。只观察到几件事。字符串使服务器的Action字符串化,但到达JS代码时就像解析过一样。
回头看,这就是为什么我在JSON. parse上出现了错误。可能是@Html.Raw正在进行解析。

相关问题