我目前正在通过http正文向视图发送文本区域和项目列表。但是,我现在一直在尝试朝着更优雅的解决方案发展,并希望将其作为模型发送。我在网上看过,但似乎找不到任何可以帮助我理解的东西。
我知道您可以使用“ html.beginForm”并仅使用“ form”标签将数据发布到html中。我使用表单标签发送我的物品。如何为该标签添加模型,以便通过邮寄发送的数据具有所需的格式
<form name="message" id="message" action="/message/" method="post">
<ul id="list">
<li style="list-style-type:disc;">E-mail: <input type="email" name="emailaddress" required></li>
</ul>
<p><button type="button" onclick="addEmailField()">Add email</button></p>
<script>
function addEmailField() {
var ul = document.getElementById("message").getElementsByTagName("UL")[0];
if (ul.childElementCount < 25) {
var li = document.createElement("li");
li.innerHTML = "<li>E-mail: <input type='email' name='emailaddress' required></li>";
ul.appendChild(li);
} else {
alert("Reached limit of 25 emails, can not add more");
}
}
</script>
<p><button type="button" onclick="removeEmailField()">Remove email</button></p>
<script>
function removeEmailField() {
var ul = document.getElementById("message").getElementsByTagName("UL")[0];
if (ul.childElementCount > 1) {
ul.removeChild(ul.lastChild);
}
}
</script><br><br><br>
<h3>Message</h3>
<textarea name="textarea" style="width:750px;height:300px;resize:none;" maxlength="3500" ; required></textarea><br>
<input type="submit" value="Submit" />
</form>
我的模特:
using System;
using System.Collections.Generic;
using System.Text;
namespace OneTimeTool.Models
{
public class ClientInput
{
public string[] Emails { get; set; }
public string Message { get; set; }
}
}
我希望能够使用控制器中的对象来访问值(电子邮件和文本区域的列表),而不是手动从正文中提取它们。
[HttpPost]
public IActionResult message(ClientInput model)
答案 0 :(得分:0)
就像@Dilip所说的一样,您可以使用ajax调用将数据作为字符串传递给控制器。
为您的文本区域添加一个ID,例如_message
var textareaMessage = $("#_message").val();.
var json = '{textarea: "' + textareaMessage + '"}';
$.ajax({
url:'@Url.Action("//Action", "//Controller")',
type:'POST',
data: json,
contentType:'Application/json',
success:function(result){
//Do whatever
}
})