0

ファイルをアップロードしてディレクトリに保存する機能があります。それはすべて良いことです。そのファイルに関する情報をデータベースに登録する必要があります。これまでのところ、この特定のケースでビューからコントローラーに値を渡す方法がわかりません。メソッドパラメーターとして渡そうとしましたが、値が投稿されていません。

これが私のRazorフォームです:

@using (Html.BeginForm("AjaxUpload", "Cases", FormMethod.Post, new { enctype = "multipart/form-data", id = "ajaxUploadForm" }))
        {
        <fieldset>
        <legend>Upload a file</legend>
        <label>File to Upload: <input type="file" name="file" />(100MB max size)</label>

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

        </fieldset>
        }
    <div id="attachments">
        @Html.Partial("_AttachmentList", Model.Attachments)
    </div>

フォームをajax化する私のjQueryは次のとおりです。

$(function () {
    $('#ajaxUploadForm').ajaxForm({
        iframe: true,
        dataType: "json",
        beforeSubmit: function () {
            $('#ajaxUploadForm').block({ message: '<h1><img src="/Content/images/busy.gif" /> Uploading file...</h1>' });
        },
        success: function (result) {
            $('#ajaxUploadForm').unblock();
            $('#ajaxUploadForm').resetForm();
            $.growlUI(null, result.message);
            //$('#attachments').html(result);
        },
        error: function (xhr, textStatus, errorThrown) {
            $('#ajaxUploadForm').unblock();
            $('#ajaxUploadForm').resetForm();
            $.growlUI(null, 'Error uploading file');
        }
    });

});

コントローラーメソッドは次のとおりです。

public FileUpload AjaxUpload(HttpPostedFileBase file, int cid)
        {
        file.SaveAs(Server.MapPath("~/Uploads/" + file.FileName));

        var attach = new Attachment { CasesID = cid, FileName = file.FileName, FileType = file.ContentType, FilePath = "Demo", AttachmentDate = DateTime.Now, Description = "test" };
        db.Attachments.Add(attach);
        db.SaveChanges();

        //TODO change this to return a partial view
        return new FileUpload { Data = new { message = string.Format("{0} uploaded successfully.", System.IO.Path.GetFileName(file.FileName)) } };
        }

データベースにレコードを挿入できるように、cid をこのメソッドに渡したいと思います。

4

1 に答える 1

1

フォーム内の非表示フィールドとして含めることができます。

@Html.Hidden("cid", "123")

またはルート値として:

@using (Html.BeginForm(
    "AjaxUpload", 
    "Cases", 
    new { cid = 123 },
    FormMethod.Post, 
    new { enctype = "multipart/form-data", id = "ajaxUploadForm" }
))
{
    ...
}
于 2012-07-08T20:49:37.497 に答える