【问题标题】:How to write in a TextArea from controller in MVC .NET如何从 MVC .NET 中的控制器写入 TextArea
【发布时间】:2017-04-30 03:10:43
【问题描述】:

我正在开发一个小应用程序作为学习 MVC 和 ASP.NET 的练习,我对以下代码有疑问:

顺便说一句:对不起...我学习了 .NET,但没有学习 ASP,只学习了 Windows 窗体,而没有关于 MVC(作为一种实用的方法)。

这是我的观点:

@using (Html.BeginForm("userById", "Home", FormMethod.Post))
{
   @Html.TextBoxFor(model => model.Id)
   @Html.ValidationMessageFor(model => model.Id)
   <button type="submit">Subscribe</button>
}

<h3>Value results</h3>
@Html.TextArea("results", new { rows = 40, columns = 80 })

我想用 Json 数据填充这个 TextArea(可以是另一个元素)

我的控制器:

[HttpPost]
    public ActionResult userById()
    {
        string receivedData;

        HttpWebRequest req = (HttpWebRequest)WebRequest
            .Create("http://www.mocky.io/v2/5808862710000087232b75ac");

        req.ContentType = "application/json";
        var response = (HttpWebResponse)req.GetResponse();

        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            receivedData = sr.ReadToEnd();
        }

        var data = JsonConvert.DeserializeObject<RootObject>(receivedData);

        List<User> userList = data.clients.ToList();

        foreach (var item in userList)
        {
            ViewData["results"] = item.Id;
        }

        return View("Index");
    }

我的想法是使用存储在名为 userList 的变量中的 Json 数据填充 TextArea,但 foreach 循环仅填充一个元素。 :( 有人可以帮帮我吗?

提前致谢!

【问题讨论】:

  • 您想在文本区域中按原样显示完整的 json 数据吗?
  • 是的,只显示一个字段,例如网格。每行一个
  • 好吧,如果你只是想显示所有的json数据,那么你可以去掉foreach循环,避免json反序列化,而是ViewData["results"] = receivedData;

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


【解决方案1】:

在 foreach 循环中的解决方案中,您不断覆盖 VeiwBag 中的值。如果需要,您可以直接使用 JSON 填充它:

ViewData["results"] = JsonConvert.SerializeObject(userList);

如果要显示用户,可以将用户集合到 ViewBag:

ViewData["results"] = userList;

然后在视图中构建用户列表例如:

<ul>
    @foreach(var user in ViewData["results"])
    {
        <li>@user.Name</li>
    }
</ul>

【讨论】:

  • 感谢您的快速回答,因此我需要将 Json 数据作为对象进行操作,为此我尝试使用 foreach 循环打印 User.Id 字段。如果我直接将 Json 数据设置为 ViewData["results"] 我会查看所有的 json。 :(
  • @MadDev,是的,我首先认为你想要一个 json 视图。您确实需要操作从 json 反序列化的对象并在 foreach 循环中使用它们。
  • 我可以毫无问题地操作对象,事实上我有一个从 json 文件中提取的对象的列表,但我可以显示字段......事实上这个问题非常“简单”,我只是想要在组件中显示列表(例如 TextArea),但您的解决方案不起作用(至少在我的情况下);-) 当我尝试在视图中操作对象时出现错误。
【解决方案2】:

最后我用下面的代码解决了这个问题,如果有人知道如何改进它,我会很高兴。

控制器代码:

[HttpPost]
    public ActionResult userById()
    {
        string receivedData;

        HttpWebRequest req = (HttpWebRequest)WebRequest
            .Create("http://www.amisteriousurl.com");

        req.ContentType = "application/json";
        var response = (HttpWebResponse)req.GetResponse();

        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            receivedData = sr.ReadToEnd();
        }

        var data = JsonConvert.DeserializeObject<RootObject>(receivedData);
        List<User> userList = data.clients.ToList();
        ViewData["results"] = getId(userList);

        return View("Index");
    }

private string getId(List<User> list)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var item in list)
        {

            sb.Append(item.Id);
            sb.Append("\n");
        }

        return sb.ToString();
    }

查看:

@{
ViewBag.Title = "Home";
}

@model InsuranceWebAPI.Models.User

@using (Html.BeginForm("userById", "Home", FormMethod.Post))
{
   @Html.TextBoxFor(model => model.Id)
   @Html.ValidationMessageFor(model => model.Id)
   <button type="submit">Subscribe</button>
}

<h3>Value results</h3>
@Html.TextArea("results", new { rows = 40, columns = 80 })

型号:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace InsuranceWebAPI.Models
{
public class RootObject
{
    public IEnumerable<User> clients { get; set; }
}
public class User
{
    private string email;
    private string id;
    private string name;
    private string role;

    public User()
    {

    }

    public User(string email, string id, string name, string role)
    {
        this.Email = email;
        this.Id = id;
        this.Name = name;
        this.Role = role;
    }

    [Required]
    public string Email { get; set; }
    [Required]
    public string Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Role { get; set; }

}
}

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多