2

私は約20分間閲覧しましたが、これを理解することはできません. URL に POSTED されたデータを取得するにはどうすればよいですか?

FormCollection 引数は必要ですか?

PHP が使用する print_r() または vardump() 関数に代わる良い方法はありますか? それとも、デバッガーのブレークポイントに頼るだけですか?

    [IsLogged]
    [HttpPost]
    public JsonResult SaveRecord(FormCollection formCollection)
    {
        var disease = Convert.ToString(formCollection.GetValue("disease"));
        var link = Convert.ToString(formCollection.GetValue("link"));

        disease = Server.HtmlEncode(disease);
        link = Server.HtmlEncode(link);

        string[] output = new string[] { disease, link };
        return Json(output);

    }

-- 編集: クライアント側のコード --

<form method="post" action="@Url.Action("SaveRecord", "Dashboard")">

<div class="control-group">
    <label class="control-label">Disease</label>
    <div class="controls">
        <textarea name="disease" placeholder="Insert the details of your disease."></textarea>
    </div>
</div>

<div class="control-group">
    <label class="control-label">Remedy Link</label>
    <div class="controls">
        <input type="text" name="link" placeholder="Provide the link to your remedy." />
    </div>
</div>

<div class="control-group">
    <div class="controls">
        <input type="submit" value="Create Record" class="btn btn-primary" />
    </div>
</div>

</form>

Cliff Notes: 私は MVC3 を使い始めてまだ数日なので、よろしくお願いします :) この言語は、私が慣れ親しんでいる言語よりもかなり高度ですが、とても便利です。

これが私の最終的な解決策です!

私が欲しかったのは、このモデルのものをすべて含まない POST だけでした。エンティティではなく、手動の SQL のものをやっています。

    [IsLogged]
    [HttpPost]
    public JsonResult SaveRecord()
    {

        var disease = Convert.ToString(Request["disease"]);
        var link = Convert.ToString(Request["link"]);

        disease = Server.HtmlEncode(disease);
        link = Server.HtmlEncode(link);

        string[] output = new string[] { disease, link };
        return Json(output);

    }
4

3 に答える 3

3

モデルで厳密に型指定されたビューを使用します。

@model YourModel

アクションにモデルの引数を追加します。

public JsonResult SaveRecord(YourModel model)

完全な例については、http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-modelを参照してください。

于 2013-01-18T20:28:44.033 に答える
2

ジュルメルは正しいです。次の定義を使用して、フォーム入力の name 属性と一致するプロパティ名を含む、厳密に型指定されたビューとモデルを作成する必要があります。

public class YourModel
{
   public string Disease { get; set; }

   public string Link { get; set; }
}

これを行うと、値プロバイダーによって提供された結果に基づいて、モデル バインダーが厳密に型指定されたモデルを作成します。詳細情報へのリンクはこちらです。

値プロバイダーは、RouteValueDictionary、Request.Form、Request.Files、Request.QueryString などのオブジェクトの単なるラッパーです。MVC 担当者はこのようなものをきちんと抽象化したので、直接処理する必要はありません。モデル バインダーはこれらの値を受け取り、それを使用してモデルにデータを設定します。

于 2013-01-18T20:38:13.037 に答える
2

私は最近、これを自分自身に尋ねました。

必要なRequest.Formのは、NameValueCollection であるため、値ではなく変数名のみを表示することです。Json 出力に表示するには、辞書に変換する必要があります。

私のコード

/// <summary>
/// Serializes object to JSON format
/// </summary>
/// <param name="input">Object</param>
/// <returns>JSON string</returns>
public static string SerializeObject(Object input, bool debug = true)
{
    string json = JsonConvert.SerializeObject(input, Formatting.Indented, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, MaxDepth = 2 });
    if (debug)
    {
        return "<pre>" + json + "</pre>"; // In order to preview in browser
    }

    return json;
}

/// <summary>
/// Serializes Request.Form (NameValueCollection) to JSON format
/// </summary>
/// <param name="input">NameValueCollection</param>
/// <returns>JSON string</returns>
public static string SerializePostRequest(NameValueCollection post)
{
    var dict = new Dictionary<string, string>();
    foreach (string key in post.Keys)
    {
        dict.Add(key, post[key]);
    }

    return SerializeObject(dict);
}

使用法

[HttpPost]
public JsonResult SaveRecord(FormCollection formCollection)
{
    // Same as print_r($_POST) in php
    return Content(SerializePostRequest(Request.Form));
}
于 2013-01-18T20:36:42.037 に答える