2

我浏览了大约 20 分钟,但无法弄清楚这一点。 如何获取发布到我的 URL 的数据

我需要 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

我最近才问自己。

您需要的是Request.Form,但它只会显示变量名称,而不是值,因为它是 NameValueCollection。为了让它显示在 Json 输出中,您需要将其转换为 Dictionary。

我的代码

/// <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 回答
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 回答