1936年10月,紅一、紅二、紅四方面軍在甘肅會寧和靜寧以北的將台堡(今屬寧夏)會師後,北移至海原、靖遠打拉池地區。這時,蔣介石不顧中國共產黨一再提出的“停止內戰,一致抗日”的主張,繼續堅持反共的內戰政策,並坐鎮西安,調集國民黨軍5個軍,於下旬從會寧至隆德一線由南向北,分4路向紅軍進攻。
為粉碎敵人的進攻,爭取抗日民族統一戰線的形成,紅軍前敵總指揮部根據中共中央和中革軍委的訓示,决定集中主要兵力給國民黨軍第1軍(軍長胡宗南)以殲滅性打擊;以一部兵力牽制第3、第37軍,並相機予以打擊;對東北軍第67軍等積極進行統一戰線工作,以遲滯其前進。
10月底,紅一方面軍第1、第15軍團和第81師,紅二方面軍第2、第6軍團及紅四方面軍第4、第31軍,開始由打拉池、海原地區逐次向東轉移,尋機殲敵。至11月15日,各部分別移至豫旺堡、毛居井以東和環縣以西以及萌城、甜水堡地區。
此時,國民黨軍第37軍正準備西渡黃河,“追剿”紅軍河西部隊;東北軍第67軍等部經紅軍勸阻,前進緩慢;第3軍進佔同心城後,也停止前進;唯獨國民黨軍第1軍緊緊尾追紅軍,進至豫旺地區。紅軍主力奉命向山城堡迅速靠近,打擊國民黨軍進攻。16日,紅軍各部向山城堡南北地區集結。
山城堡位於環縣以北洪德和甜水堡中間地帶,溝壑縱橫,地形複雜,利於大部隊設伏。17日,國民黨軍胡宗南部第1軍分左中右三路向鹽池、甜水堡、山城堡方向前進:左路第1師第1旅由惠安堡東進;中路第1師第2旅向萌城、甜水堡推進;右路第78師由西田家原向山城堡前進;第43、第97師為第二梯隊,進至豫旺縣城及附近地區。當日,紅軍第4、第31軍擊潰中路第1師第2旅,殲敵團長以下600餘人。
17日18時,毛澤東電示彭德懷:紅軍宜以第28軍鉗制敵第1旅,第4軍鉗制敵第2旅,集結第1軍團、第15軍團及第31軍首先消滅敵第78師,然後再打第2旅,向西北橫掃。18日,國民黨軍第78師發覺紅軍主力已向洪德城、環縣方向轉移,即向山城堡方向追擊。
19日,紅軍前敵總指揮彭德懷作出集中優勢兵力求殲孤立深入之敵右路第78師的部署:第1軍團在山城堡以南待機;第15軍團一部誘敵東進,主力隱蔽於山城堡以東及東北山地;第4軍主力於山城堡東南地區,第31軍於山城堡以北地區隱蔽待機;第28軍在紅井子一帶牽制國民黨軍左路第1師第1旅;紅二方面軍第6軍團以及紅一方面軍第81師、特務團、教導營在洪德城、環縣一線以西地區,阻滯東北軍;前敵總指揮設在山城堡東南於家灣。
20日,國民黨軍右路第78師進佔山城堡、小檯子、風臺堡等地,並派出兩個連沿山城堡至洪德城大道向南偵察,在八裏鋪以南遭到第1軍團一部突然攻擊,大部被殲,少數逃回山城堡。
21日,國民黨軍第78師由山城堡繼續向東攻擊。預伏在山城堡周圍的紅軍各部在彭德懷的指揮下,向山城堡之敵發起總攻。第1軍團第2師協同第15軍團一部向山城堡西北的哨馬營攻擊,斷其退路。第1軍團第1、第4師由山城堡以南向北進攻,第31軍一部由山城堡以北向南進攻,第4軍由山城堡東南向西北進逼。
當日黃昏,第1軍團第1、第4師和第31軍一部,乘敵向山城堡以北山地撤退之機,從南、東、北三面攻入山城堡,並乘勝追擊。此時,第2師、第15軍團一部已經繞至敵後,截斷退路。敵軍頓時潰散,一部突圍。至22日9時,敵軍大部被紅軍包圍壓縮於山城堡西北山谷中,後被殲滅。
這次戰鬥,紅軍共殲滅國民黨軍第78師超過一個旅的兵力,取得山城堡戰役的勝利。第78師在戰報中稱,此戰“損失極重,混亂不堪”“以現計約損失三分之二以上”。
山城堡戰役,是中國工農紅軍三大主力會師後,相互配合、密切合作取得的重大軍事勝利,給蔣介石嫡系胡宗南部以沉重打擊,迫使國民黨軍停止了對陝甘蘇區的進攻,對促進“逼蔣抗日”方針的實現起了積極作用。