0

ここに画像の説明を入力

ドロップダウンリストで選択した項目の値を取得したいと思います。次のコードを使用して、ファイルをデータベースに保存しています。

public ActionResult UploadDoc(IEnumerable<HttpPostedFileBase> files)
{
    foreach (var file in files)
    {
        if (file != null && file.ContentLength > 0)
        {
            byte[] data = new byte[file.ContentLength];
            file.InputStream.Read(data, 0, file.ContentLength);

            Document doc = new Document
            {
                UploadedOn = DateTime.Now,
                MimeType = file.ContentType,
                UserName = User.Identity.Name,
                Data = data,
                FromLanguage = 1,
                ToLanguage = 2
            };

            dbContext = new MedicalDb();
            dbContext.Documents.Add(doc);
            dbContext.SaveChanges();
        }
    }
    return RedirectToAction("Index");
}  

ただし、ドキュメントの FromLanguage プロパティと ToLanguage プロパティを設定できるように、ドロップダウン リストから選択した値を取得したいとも考えています。ビューモデルが必要だと思いますが、その方法がわかりません。ドキュメント アップロード用の新しい行は jQuery を使用して追加され、ddl の名前は「ddlFromLanguage1」、「ddlFromLanguage2」、「ddFromLanguage3」、「ddlToLanguage1」、「ddlToLanguage2」、「ddlToLanguage3」などです。

<form action="UploadDoc" method="post" enctype="multipart/form-data">    
<table id="tblUploadDocs">
    <tr id="row1">
        <td><input type="file" name="files" id="file1" /></td>
        <td>Bu dilden</td>
        <td>@Html.DropDownList("ddlFromLanguage1", ViewBag.Languages as SelectList)</td>
        <td>şu dile çevrilecek</td>
        <td>@Html.DropDownList("ddlToLanguage1", ViewBag.Languages as SelectList)</td>
    </tr>
</table>
<br />
<a href="javascript:addRow();" style="margin:10px 0;">Yeni dosya ekleyin</a>
<input type="submit"  />
</form>
4

3 に答える 3

1

ポストバックされたフォームは、モデル関連の値に加えて、コントローラーに FormCollection を返します。

例えば

  //In your view
  @using (Html.BeginForm("CountrySelect", "Country", FormMethod.Post))
            {
                @Html.AntiForgeryToken()
                <select name="country" id="country-select">
                   <option value="selector">Pick a Country</option>
                   <option value="England">England</option>
                   <option value="England">England</option> 
                </select>         
            }

//In controller
//This will get you the name of the selected country from your form
[HttpPost]
Public ActionResult CountrySelect(FormCollection formData)
{
   string country = formData["country"].toString();
}
于 2013-03-19T19:41:01.347 に答える
1

良い例を見て、それらと同じか非常に似ていることを行う必要があると思います。

これらを見てください:

これらはあなたを動かすはずです。

成功しなかった場合、または私が提供したものが実際に役に立った場合はお知らせください。

ありがとう

于 2013-03-19T18:17:37.223 に答える
0

ソリューション:

ビューモデル:

public class CustomerDocUploadViewModel
{
    public HttpPostedFileBase File { get; set; }
    public int FromLanguage { get; set; }
    public int ToLanguage { get; set; }
}

景色:

@model IList<Models.ViewModels.CustomerDocUploadViewModel>

..。

<form action="UploadDoc" method="post" enctype="multipart/form-data">    
<table id="tblUploadDocs">
    <tr id="row1">
        <td><input type="file" name="[0].File" /></td>
        <td>Bu dilden</td>
        <td>@Html.DropDownList("[0].FromLanguage", ViewBag.Languages as SelectList)</td>
        <td>şu dile çevrilecek</td>
        <td>@Html.DropDownList("[0].ToLanguage", ViewBag.Languages as SelectList)</td>
    </tr>
</table>
<br />
<a id="lnkAdd" href="javascript:addRow();" style="margin:10px 0;">Yeni dosya ekleyin</a>
<input type="submit"  />
</form>

そして最後に、コントローラーのアクションメソッド:

[HttpPost]
    public ActionResult UploadDoc(IList<CustomerDocUploadViewModel> docInfos)
    {
        for (int i = 0; i < docInfos.Count; i++)
        {
            if (docInfos.ElementAt(i).File != null && docInfos.ElementAt(i).File.ContentLength > 0)
            {
                byte[] data = new byte[docInfos.ElementAt(i).File.ContentLength];
                docInfos.ElementAt(i).File.InputStream.Read(data, 0, docInfos.ElementAt(i).File.ContentLength);

                // Save the file into the database
                Document doc = new Document
                {
                    UploadedOn = DateTime.Now,
                    MimeType = docInfos.ElementAt(i).File.ContentType,
                    UserName = User.Identity.Name,
                    Data = data,
                    FromLanguage = docInfos.ElementAt(i).FromLanguage,
                    ToLanguage = docInfos.ElementAt(i).ToLanguage
                };

                dbContext = new MedicalDb();
                dbContext.Documents.Add(doc);
                dbContext.SaveChanges();
            }
        }    
        return RedirectToAction("Index");
    }     
于 2013-03-20T09:43:44.290 に答える