2017-09-15 23 views
-1

これは重複スレッドではありません。 私の場合は、モデルなしで配列パラメータを送信することです。他のスレッドはint型の文字列パラメータを送信します。モデルのないポストアレイ形式の方法はありますか?

私はモデルオブジェクトを持つコントローラに投稿する方法を知っています。
しかし、私は時々モデルdbの外にデータを投稿し、フォーマットオブジェクトまたは配列に投稿したいと考えています どうすればいいですか?

ビュー

<form action="/home/showdata" method="post"> 
    <input type="text" name="arr.username" /> 
    <input type="text" name="arr.password" /> 
    <input type="text" name="arr.email" /> 
</form> 

コントローラ

public class HomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult ShowData(Array data) 
    { 
     return Content(data.username + data.password + data.email); 
    } 
} 
+2

なぜモデルなしでこれをしたいのですか? – DavidG

+0

データベーステーブルにないフィールドがいくつかあるためです。 –

+2

データベースはここに投稿されているモデルと何が関係していますか? – DavidG

答えて

2

Modelsの多くの異なる種類があります。例えば。 Database ModelsView ModelsDTOsなどです。したがって、お客様の場合、クライアントから受け取ったデータは、データベースモデルとは大きく異なります(通常はそうです)。つまり、ビューに固有のモデルView Modelを作成し、データの検証後にそのデータをデータベースモデルに転送する必要があります。たとえば:

public class SampleViewModel { 
    public int Id { get; set;} 
    public string Name { get; set; } 
} 

そして、あなたのコントローラで:

public IHttpActionResult SampleActionMethod(SampleViewModel model) { 
    if (!ModelState.IsValid) { 
      return BadRequest(); 
    } 
    var sampleDbModel = new SampleDatabaseModel() { 
      FullName = model.Name, 
      ProductId = model.Id, 
      // ... some other properties ... 
    }; 
    // ... Save the sampleDbModel ... 
    return Ok(); // .. or Created ... 
} 

この答えはちょうどあなたがやろうとしているものを行う方法を示します。しかし理想的には、とにかくアクション・メソッドのパラメータとしてデータベース・モデルを使用すべきではありません。また、他にも多くのことが関係しているので、Repository PatternUnit Of Work(データベースタスク管理用)、Automapper(必要に応じてモデルをモデル化するなど)などをお勧めします。 。

+1

ああ、私はモデルが常にデータベースモデルであると誤解しています。ありがとう –

0

ここに最善の解決策は、モデルを使用することです。モデルは、データベーステーブルに関連付ける必要はありません。

public ActionResult ShowData(YourModelNameHere data) 

そして、あなたのようなものとしてYourModelNameHereを定義することができます::

public ActionResult ShowData(Array data) 

は可能性があり

public class YourModelNameHere 
{ 
    public string username {get; set;} 
    public string password {get; set;} 
    public string email {get; set;} 
} 
+1

私はモデルが常にデータベースモデルであると誤解しています。ありがとうございます。 –

1

こんにちは私はあなたがあなたには、いくつかのHTMLの入力が同じ名前を持つ場合も、あなたはその値の文字列配列を取得します

public class HomeController : Controller 
{ 

    [HttpPost] 
    public ActionResult ShowData(FormCollection data) 
    { 
     string username=data.GetValues("username")[0]; 
     string password=data.GetValues("password")[0];  
      string email=data.GetValues("email")[0]; 

     return Content(username + password + email); 
    } 
} 

FormCollection

を使用することができ、コントローラに
<form action="/home/showdata" method="post"> 
    <input type="text" name="username" /> 
    <input type="text" name="password" /> 
    <input type="text" name="email" /> 
</form> 

をFormCollectionお奨めします。

+0

本当にあなたがFormCollectionでデータを渡すことができるモデルを使用したくない場合 –

+0

こんにちは!それも素晴らしいです。 –

-4

まずフォーム上でデータをシリアライズし、非表示フィールドにデータをシリアライズする必要があります。投稿後にキーを使用してformcollectionからこのデータを取得し、 をデシリアライズします。

+0

この回答は、質問されている質問とは関係ありません。また、隠しフィールドにデータを直列化することは完全に不要です。 – DavidG

関連する問題