如何从视图中将模型发布到控制器?

时间:2019-06-18 07:15:24

标签: html .net forms razor model-view-controller

我目前正在通过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)

1 个答案:

答案 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
    }
})