2017-03-03 4 views
0

値、C#MVCレイザー - コントローラ隠し得ていない入力は、私は私のフォームビューで非表示の入力フィールドに、次の定義されている

フォーム:

@model Mysite.Models.FileUpload 
 
@using Mysite.Models 
 
@{  
 
    var FileUploadData = ViewData["FileUploadData"] as FileUpload;  
 
} 
 
@using (Html.BeginForm("LoadData", 
 
         "LoadAndAnalyzeData", 
 
         FormMethod.Post, 
 
         new { enctype = "multipart/form-data" })) 
 
{ 
 
    <div class="div-root" id="serverslist"> 
 
     @Html.LabelFor(m => m.SelectedServer) 
 
     @Html.DropDownListFor(m =>m.SelectedServer, FileUploadData.ServersList) 
 
    </div> 
 
    <div class="div-root"> 
 
     <label for="files">Choose File 1: </label> 
 
     <input type="file" name="file1" id="file1" /> 
 
    </div> 
 
     <div class="div-root"> 
 
     <input type="submit" id="upload" name ="FileUpload" value="Upload Files For Analysis" />   
 
    </div> 
 
} 
 
@using (Html.BeginForm("AnalyzeLoadedData", "LoadAndAnalyzeData")) 
 
{ 
 
    <input type="hidden" name="servername" id="servername" value='@ViewBag.servername' /> 
 
    @ViewBag.servername 
 
    <input type="submit" id="analysis" name ="AnalyzeLoadedData" value="Analyze Loaded Data" /> 
 
}

私は私のモデルを持っています以下のように「サーバ名」を定義している。

public string servername { get; set; } 

私が機能をサブミットすると、AnalyzeLoadedDataは期待どおりにサーバー名を取得していません。しかし、ページにはの一部としてサーバー名が表示されています。

を「名前をServerNameの 『サーバー名』は、現在のコンテキスト内に存在しない」私はここに欠けているものを私を導いてください。

+2

ひげコードを掲示すると物事を明確にするのに役立ちますが、サーバー名をモデル、なぜあなたはViewBagを使用していますか? ViewBagの項目はモデルにバインドされていません。 @ Html.HiddenFor(x => x.servername) –

+0

私はこのウェブページに2つのフォームを持っています。 @ViewBagは、アクションの1つに作成され、別のアクションへの入力として渡されます。 – sqlcheckpoint

+0

これはおそらくそれとは関係ありませんが、フォーム名と送信ボタンの両方に同じ「名前」(AnalyzeLoadedData)を再使用しないようにする必要があります。 –

答えて

0

あなたの投稿を更新しました。 ViewBagの使用を中止し、かみそりヘルパーを使用するだけです。変更しますHtml.HiddenFor(X => x.servername)@

+0

申し訳ありませんが、私の質問が完全ではない&私はかなりC#のコーディングに新しいです...私は同じビューで2つのフォームがあります。 Form1を送信すると、期待どおりForm1から対応するAction1にサーバー名が取得されます。私はAction1からViewBagにサーバー名を割り当てて、別のフォームForm2を持っている同じビューにそれを送り返します。ユーザーが2番目のボタンをクリックすると、Form2はViewBagから取得したAction2にサーバー名をポストします。 – sqlcheckpoint

1

ここではあなたがMVCで作られたservernameと呼ばれるそのプロパティを使用して結果を得ることができる方法の一例です。あなたのモデルにservernameを全く定義していないか、ランダムなプロパティがあるだけです。あなたがプロパティとしてサーバー名を持つ

あなたのクラスには、次のようになります。あなたのコントローラがどのように見える可能性が

public class Server 
    { 
     public string servername { get; set; } 
    } 

public class LoadAndAnalyzeDataController : Controller 
    { 
     public ActionResult LoadAndAnalyzeData() 
     { 
      //It is not clear why you have called your action and controller 
      //the same thing. Do you know what your action and controller are? 

      //You could use a view bag like this if you really want but it 
      //has nothing to do with the property you mentioned in your 
      //question... 

      ViewBag.servername = "......"; 

      //Or you could make an instance of the Server class and set your 
      //servername property to a value like this: 

      Server myServer = new Server(){ servername = "...." }; 

      //After making an instance make sure to pass it as a parameter 
      //to your view like this: 

      return View(myServer); 
     } 

     [HttpPost] 
     public ActionResult LoadAndAnalyzeData(string servername) 
     { 
      //do something with servername 
      return View(); 
     } 
    } 

最終的にあなたのビューでは、投稿何を次のようになります。

//Dont forget to refer to your model at the top of your page if you would 
//like to use the data you pass through your controller. 
@model Server 

@using (Html.BeginForm("AnalyzeLoadedData", "LoadAndAnalyzeData")) 
{ 
    <input type="hidden" name="servername" id="servername" value='@Model.servername' /> 

    //you can also use the ViewBag if you have populated it with data like 
    //you had: 
    @ViewBag.servername 

    //It is very wierd to give a value and name to your submit button like 
    //you had it here: 
    <input type="submit" id="analysis" name ="AnalyzeLoadedData" value="Analyze Loaded Data" /> 

    //But anyway if you put a break point in the [HttpPost] action in the 
    //controller which you refer to in this begin form you will see your 
    //value for 'servername' coming through as a parameter. 

} 
+0

申し訳ありませんが、私の質問が完全ではない&私はかなりC#のコーディングに新しいです...私は同じビューで2つのフォームがあります。 Form1を送信すると、期待どおりForm1から対応するAction1にサーバー名が取得されます。私はAction1からViewBagにサーバー名を割り当てて、別のフォームForm2を持っている同じビューにそれを送り返します。ユーザーが2番目のボタンをクリックすると、Form2はViewBagから取得したAction2にサーバー名をポストします。 – sqlcheckpoint

+0

2つのフォームを含むViewのスニペットで投稿を更新しました。あなたはあなたの洞察をチェックしてお勧めしますか? – sqlcheckpoint

関連する問題