Моя модель настроена так, что контроллер может выдавать Json-ответ данных из пользовательского ввода. Свойство rgba моей модели представляет собой массив целых чисел. Если пользователь вводит текст, скажем, «255, 0, 0, 1» в TextBoxFor для «rgba», текст не отображается в массив (что, как я думал, должно было произойти автоматически). Вместо этого int [0] - это то, что делает его контроллером.
Я перепробовал все возможные решения, которые можно найти здесь, включая передачу объекта FormCollection в контроллер. Я пытался получить значение TextBoxFor с помощью JS / jQuery и манипулировать данными, но не могу понять, как передать манипулированные данные обратно в модель (это кажется не идеальным, так как должен быть простой способ сделатьэто в .Net).
Контроллер:
public class HomeController : Controller
{
public IActionResult NewColor()
{
Rootobject newColor = new Rootobject();
return View(newColor);
}
[HttpPost]
public IActionResult NewColor(Rootobject color)
{
var json = JsonConvert.SerializeObject(color);
return Json(json);
}
}
Модель:
public class Rootobject
{
public Color[] colors { get; set; }
}
public class Color
{
public string color { get; set; }
public string category { get; set; }
public string type { get; set; }
public Code code { get; set; }
}
public class Code
{
public int[] rgba { get; set; }
public string hex { get; set; }
}
Вид:
@model WebAppPlayground.Models.Rootobject
@{
ViewData["Title"] = "New Color";
}
<style>
input:focus {
border-radius: 5px;
}
input {
padding: 2px;
border-radius: 5px;
border-style: ridge;
}
</style>
<h2>New Color</h2>
<h4>Color</h4>
<hr />
<center>
@using (Html.BeginForm("NewColor", "Home", FormMethod.Post, new { id = "form" }))
{
<table style="border-collapse:separate; border-spacing: 5px 5px">
<tbody>
<tr class="form-group" for="Color">
<td>Color</td>
<td>@Html.TextBoxFor(m => m.colors[0].color)</td>
</tr>
<tr class="form-group">
<td class="">Category</td>
<td>@Html.TextBoxFor(m => m.colors[0].category)</td>
</tr>
<tr class="form-group">
<td class="">Type</td>
<td>@Html.TextBoxFor(m => m.colors[0].type)</td>
</tr>
<tr class="form-group">
<td class="">rgba</td>
<td>@Html.TextBoxFor(m => m.colors[0].code.rgba, new { id = "rgba"})</td>
</tr>
<tr class="form-group">
<td class="">Hex</td>
<td>@Html.TextBoxFor(m => m.colors[0].code.hex)</td>
</tr>
</tbody>
</table>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
}
<div>
<a asp-action="Index">Back to List</a>
</div>
</center>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
Я хотел бы мой контроллерполучить массив Int через rgba
TextBoxFor, где пользователь вводит текст, например 255, 0, 0, 1
.
Я думаю, что есть что-то (очевидное), которое я пропускаю или не понимаю.
**** Обновлен метод поста контроллера, чтобы удалить добавленную опору 'rgba_str' для @i_ll_be_back 'sответьте и предоставьте необходимые данные Json:
[HttpPost]
public IActionResult NewColor(Rootobject color)
{
var json = JsonConvert.SerializeObject(color);
JObject jsonObject = JObject.Parse(json);
JObject code = (JObject)jsonObject["colors"][0]["code"];
code.Property("rgba_str").Remove();
return Json(jsonObject);
}