由于要发送多条消息,最好将MessageToSend 属性数据类型从string 更改为List<string>。像这样的代码:
public class MessageViewModel
{
public string Title { get; set; }
public List<string> MessageToSend { get; set; }
}
在查看页面中,当页面加载时,您可以复制初始的textarea 并将其用作模板。然后,您可以添加一个 Font Awesome Plus 图标来显示添加按钮。在其点击事件中,您可以根据模板动态添加textarea 元素。代码如下:
家庭控制器:
public IActionResult SendMessage()
{
MessageViewModel model = new MessageViewModel() { MessageToSend = new List<string>() { "" }, Title="" };
return View(model);
}
[HttpPost]
public IActionResult SendMessage(MessageViewModel message)
{
if (ModelState.IsValid)
{
return View(message);
}
return View();
}
SendMessage 查看页面:
@model MVCWebApplication.Models.MessageViewModel
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<div class="row">
<div class="col-md-4">
<form asp-action="SendMessage">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="MessageToSend" class="control-label"></label> <i class="fa fa-plus" id="iconAdd" style="font-size:22px"></i>
<div id="multiple">
@if (Model.MessageToSend.Count > 0)
{
@for (var i = 0; i < Model.MessageToSend.Count; i++)
{
@Html.TextAreaFor(c=>c.MessageToSend[i], new{ style = "width: 1200px; height: 60px;"})
}
}
</div><span asp-validation-for="MessageToSend" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" /> <input type="button" id="btnAjaxCreate" value="Ajax Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
在上述页面的最后,添加以下脚本:
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
$(function () {
//get the first textarea, use it as a template.
var existingtext = $("#multiple").html();
//submit button click event
$("#iconAdd").click(function () {
//get the count of the textarea.
var num = $("#multiple").find("textarea").length;
//change the template id and name value.
newtext = existingtext.replace("MessageToSend[0]", "MessageToSend[" + num + "]").replace("MessageToSend_0_", "MessageToSend_" + num + "_");
//dynamically add the textarea element.
var htmlcontent = $("#multiple").html() + newtext;
$("#multiple").html(htmlcontent);
});
});
</script>
}
此外,您还可以使用JQuery.Ajax 将数据发送到操作方法。
添加如下动作方法:
[HttpPost]
public IActionResult AjaxSendMessage(MessageViewModel message)
{
if (ModelState.IsValid)
{
return Ok("success");
}
return View();
}
并添加以下脚本:
//using Ajax to send the data to the action method.
$("#btnAjaxCreate").click(function () {
//create a object to store the entered data.
var message = {};
message.Title = $("#Title").val();
var messgecontent = [];
$("#multiple").find("textarea").each(function (index, item) {
messgecontent.push($(item).val());
});
message.MessageToSend = messgecontent;
$.ajax({
url: "/Home/AjaxSendMessage",
method: "Post",
data: message,
success: function (response) {
alert(response);
},
error: function (response) {
console.log("error");
}
})
});
结果如下: