Получить данные POST в C#/ASP.NET

Я пытаюсь получить данные POST, но мне не везет. Мой код ниже. Когда я нажимаю кнопку формы, ничего не происходит.

Я ожидал, что, по крайней мере, моя IDE будет зависать A.Ret(), но ничего не происходит вообще.

Файл Test.cs

using System.Web;
public class A
{
    public static string ret() {
        var c = HttpContext.Current;
        var v = c.Request.QueryString; // <-- I can see get data in this
        return c.Request.UserAgent.ToString();
        return c.Request.UserHostAddress.ToString();
        return "woot";
    }
}

Файл Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="aspnetCSone._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>

    <body>
        <form id="form1" runat="server" method="post" action="Default.aspx">
            <input type=hidden name="AP" value="99" />
            <input type=button value="Submit" />
            <div>
                <a id="aa">a</a>
                <% = A.ret() %>
            </div>
        </form>
    </body>
</html>

4 ответа

Попробуйте использовать:

string ap = c.Request["AP"];

Это читает из куки, формы, строки запроса или серверных переменных.

В качестве альтернативы:

string ap = c.Request.Form["AP"];

просто читать из данных формы.

c.Request["AP"] будет читать опубликованные значения. Также вам нужно использовать кнопку отправки для отправки формы:

<input type="submit" value="Submit" />

вместо

<input type=button value="Submit" />

Я немного удивлен, что этот вопрос задавался так много раз прежде, но наиболее многократно используемое и дружественное решение не было задокументировано.

У меня часто есть веб-страницы, использующие AngularJS, и когда я нажимаю кнопку "Сохранить", я "помещаю" эти данные обратно на мою страницу.aspx или обработчик.ashx, чтобы сохранить их обратно в базу данных. Данные будут в форме записи JSON.

На сервере, чтобы превратить необработанные опубликованные данные обратно в класс C#, вот что я хотел бы сделать.

Сначала определите класс C#, который будет содержать опубликованные данные.

Предположим, что моя веб-страница публикует данные JSON следующим образом:

{
    "UserID" : 1,
    "FirstName" : "Mike",
    "LastName" : "Mike",
    "Address1" : "10 Really Street",
    "Address2" : "London"
}

Тогда я бы определил класс C# как этот...

public class JSONRequest
{
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
}

(Эти классы могут быть вложенными, но структура должна соответствовать формату данных JSON. Поэтому, если вы публикуете запись пользователя JSON со списком записей Order внутри нее, ваш класс C# также должен содержать List<> Порядка записи.)

Теперь, в моем файле.aspx.cs или.ashx, мне просто нужно сделать это и оставить JSON.Net, чтобы выполнить тяжелую работу...

    protected void Page_Load(object sender, EventArgs e)
    {
        string jsonString = "";
        HttpContext.Current.Request.InputStream.Position = 0;
        using (StreamReader inputStream = new StreamReader(this.Request.InputStream))
        {
            jsonString = inputStream.ReadToEnd();
        }
        JSONRequest oneQuestion = JsonConvert.DeserializeObject<JSONRequest>(jsonString);

И это все. Теперь у вас есть JSONRequest класс, содержащий различные поля, которые были размещены на вашем сервере.

Следующее нормально в HTML4, но не в XHTML. Проверьте свой редактор.

<input type=button value="Submit" />
Другие вопросы по тегам